目录
一、File类
1、File类包含了获得文件/目录的属性,以及对文件/目录进行改名和删除的方法。
2、在文件系统中,每一个文件都存放在一个目录下;
绝对文件名(或者完整路径):包含文件名及其完整路径和驱动器字母;
相对文件名:是相对当前工作目录的。
3.File对象的创建(介绍了三种方法)
//创建一个文件的对象
File ff1 = new File("文件的地址");
//绝对路径
System.out.println("ff1的绝对路径:" + ff1.getAbsolutePath());
// 相对路径
File ff2 = new File("happy.exe");
System.out.println("ff2的绝对路径:" + ff2.getAbsolutePath());
// 把ff1作为父目录创建文件对象
File ff3 = new File(ff1, "LOL.exe");
System.out.println("ff3的绝对路径:" + ff3.getAbsolutePath());
4.了解File类
File类包含许多获取文件属性的方法,以及重命名、删除文件和目录的方法,但是不包括读写文件内容的方法。
1 、文件是否存在
System.out.println(“判断是否存在:”+f.exists());2 、判断是否是一个目录(文件夹)
System.out.println(“判断是否是文件夹:”+f.isDirectory());3、判断是否是文件
System.out.println(“判断是否是文件:”+f.isFile());4 、判断文件的长度
System.out.println(“获取文件的长度:”+f.length());5、 //文件最后修改的时间
long time = f.lastModified();
Date date = new Date(time);
System.out.println(“获取文件最后的修改时间:”+date);6、文件的重命名
File ff = new File(“ /home/szlaurora/1.java”);
f.renameTo(ff);
System.out.println();7、以字符串数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹
f.list();8 、以文件数组的形式,返回当前文件夹下的所有文件(不包含子文件及子文件夹)
File[ ] f = f.listFiles();9、以字符串形式返回获取所在文件夹
f.getParent();10、以文件形式返回获取所在文件夹
f.getParentFile();11、创建文件夹,如果父文件夹 不存在,创建就无效
f.mkdir();12 、创建文件夹,如果父文件夹 不存在,就会创建父文件夹
f.mkdirs();13 、创建一个空文件,如果父文件夹 不存在,就会抛出异常
f.createNewFile();14、删除文件
f.delete();15、JVM结束的时候,刪除文件,常用于临时文件的删除
f.deleteOnExit();`
二、文件的输入输出
使用Scanner类从文件中读取文本数据,使用PrintWrite类向文本文件写入数据。
1.使用PrintWrite写数据
1.创建一个PrintWrite对象
PrintWrite output = new PrintWirter(filename);
2.了解PrintWrite中的常用方法
1.print(String str):向文件写入一个字符串。
2 print(char[] ch):向文件写入一个字符数组。
3 print(char c):向文件写入一个字符。
4 print(int i):向文件写入一个int型值。
5 print(long l):向文件写入一个long型值。
6 print(float f):向文件写入一个float型值。
7 print(double d):向文件写入一个double型值。
8 print(boolean b):向文件写入一个boolean型值。
通过一个小程序了解PrintWrite中的方法
public class WriteData {
public static void main(String[] args) throws java.io.IOException{ //因为使用PrintWriter的构造方法可能会抛出一个I/O异常
java.io.File file = new java.io.File("/home/szlaurora/luck.txt");
//检测文件是否存在
if(file.exists()){
System.out.println("File already exists");
System.exit(1);
}
//如果文件不存在呢,那就调用PrintWriter的构造方法创建一个新文件
java.io.PrintWriter output = new java.io.PrintWriter(file);
output.print("Jone T Smith ");
output.println(90);
output.print("Eric K Jones");
output.println(85);
output.close();//关闭文件
}
}
3.为什么要关闭文件
当程序向文件中写入数据的时候,首先将数据临时存储在内存的一个缓存中。当缓存已经满了的时候,数据自动保存到磁盘文件中。一旦文件关闭了,缓存中的所有数据将保存到磁盘文件中。
所以呐(=@__@=)
必须关闭文件用来保证所有的数据都保存到了文件中。
4.使用try-with-resources自动关闭资源
使用格式:
try {
//code statements(正常代码语句)
//exception thrown here(抛出异常的语句)
//lines not reached if exception thrown(异常抛出后无法执行的代码部分)
} catch (Exception e) {
//lines reached only when exception is thrown(抛出异常后才会执行的代码部分)
} finally {
//always executed irrespective of an exception thrown or not
//(无论是否抛出异常都会执行的代码部分)
}
2.使用Scanner读取数据
java.util.Scanner类用来从控制台读取字符串和基本类型值。
1.为了从键盘中读取,需要为System.in创建一个Scanner,
eg:
Scanner input = new Scanner(System.in);
2.为了从文件中读取,需要为文件创建一个Scanner;
eg:
Scanner input = new Scanner(new File(filename));
3.学以致用:设计一个替换文本的小程序
import java.io.*;
import java.util.*;
public class ReplaceText {
public static void main(String[] args) throws Exception{
if(args.length !=4){
System.out.println("Usage: java ReplaceText sourceFile targetFile oldStr newStr");
System.exit(1);
}
File sourceFile = new File(args[0]);
if(!sourceFile.exists()){
System.out.println("Source file " + args[0] + "does not exist");
System.exit(2);
}
File targetFile = new File(args[1]);
if(targetFile.exists()){
System.out.println("Target file " + args[1] + "already exists");
System.exit(3);
}
try(
Scanner input = new Scanner(sourceFile); //为源文件创建一个Scanner
PrintWriter output = new PrintWriter(targetFile);//为目标文件创建一个PrintWriter
){
while (input.hasNext()){
String s1 = input.nextLine();
String s2 =s1.replaceAll(args[2],args[3]);//替换
output.println(s2);
}
}
}
}
三、小小总结
1.为什么要异常处理
1.异常处理使得方法能够抛出异常给它得调用者;
2.异常产生在一个方法的执行过程中,RuntimeException和Error都是免检异常,所有的其他异常都是必检的;
3.当声明一个方法的时候,如果这个方法可能抛出一个必检异常,那么必须进行声明,这样才能告诉编译器可能出现什么错误。
4.声明异常的关键字是:throws,抛出异常的关键字是:throw;
5.调用了声明必检异常的方法,需要将该方法调用放在try语句中,在方法执行的过程中如果出现异常,catch块会捕获异常并且处理掉;
6.可以从一个共同的父类派生出各种不同的异常类。如果一个catch块捕获到父类的异常对象,它也能捕获这个父类的所有异常对象,会导致一个编辑错误;
7.任何情况下都会执行finally块中的代码;