1、boolean createNewFile():在指定路径创建文件,如果文件已经存在,则不创建,返回false.输出流对象一旦创建,如果文件存在,则会覆盖
File file = new File("file01.txt");
file.createNewFile();
此时系统会提示对createNewFile添加一个try-catch抛出异常检测,因此代码可以写成
File file = new File("file01.txt");
try {
file.createNewFile();
System.out.println("文件创建成功");
} catch (IOException e) {
System.out.println("文件创建不成功");
}
2、如上,设置文件名称以及路径,主要是四个方法:
1)、File(String pathName): pathName是路径名
①”xxx.yyy” 表示在当前项目的文件夹下面创建一个xxx.yyy的文件
②”/”表示在当前磁盘路径:”/”表示在当前磁盘的目录路径。但是不能在/后面直接添加文件或者文件夹名称,”/file”这种写法会报错,如果想在当前磁盘下创建文件那么可以使用绝对路径”C:/”(也可以是D、E、F)或者使用 2)、3)的方法:
File file= new File("/");
File file1 = new File("/", "file.txt");
这两种方法都可以实现。
③”../”表示在当前文件夹的上一层文件夹的路径:”../../”表示在当前文件夹的上两层文件夹的路径
File file1 = new File("../file01.txt");
2)、File(String parent, String child): 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例,通常parent是一个目录名,而child是一个文件名。如果parent是空的,那么效果和一个参数时候的相同。
File file3 =new File("/", "file03.txt");
3)、File(File parent, String child): 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例,即在parent的目录下创建一个child文件或者文件夹,其中parent必须是文件路径不能是文件。
File file4 = new File("../"); //表示上一层文件夹目录
File file5 = new File(file4, "file04.txt");
4)、File(URL url): 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。
3、创建文件夹:
boolean mkdir();创建文件夹
File file6 = new File("file06");
file6.mkdir();
boolean mkdirs();创建多级文件夹
File file6 = new File("/file06/file");
file6.mkdirs();
4、重命名:
boolean renameTo(File dest): 重新命名此抽象路径名表示的文件。
1)、对文件进行重命名操作。
①此方法行为的许多方面都是与平台有关的:重命名操作无法将一个文件从一个文件系统移动到另一个文件系统,该操作不是不可分的。即只能移动到该分区下的文件夹内,不能跨分区。
② 如果已经存在具有目标抽象路径名的文件,即该目录路径下存在重命名后的文件,那么该操作可能无法获得成功。应该始终检查返回值,以确保重命名操作成功。另外,重命名之后,原文件将不复存在,代码中也找不到原文件,想要使用必须使用重命名之后的文件。
File fileRename2 = new File("file1 RenameTo2.txt");
if (file1.exists()) {
if (file1.renameTo(fileRename2)) {
System.out.println("重命名2成功");
}else {
System.out.println("重命名2失败");
}
}else {
System.out.println("找不到file1");
}
if (file1.exists()) {
System.out.println(file1.isFile());
}else {
System.out.println("file1找不到");
}
运行一次输出的结果是:
重命名2成功
file1找不到
说明我们成功将file1重命名。
运行两次输出的结果是:
重命名2失败
true
说明程序又新建了一个file1,但是由于file1 RenameTo2.txt文件已经存在了,导致重命名失败,因此此处的file1仍然存在没有被转移和重命名。
2)、对文件夹进行重命名操作
对文件夹重命名只能操作最后一层的文件夹
File file6 = new File("file06/file/ggg/fff");
try {
file6.mkdirs();
System.out.println("文件夹创建成功");
} catch (Exception e) {
System.out.println("文件夹创建失败");
}
File file7 =new File("file06/file6");
if (file6.renameTo(file7)) {
System.out.println("file6重命名成功");
}else {
System.out.println("file6重命名失败");
}
通过上述代码,我们可以发现在当前项目路径下存在一个file06文件夹,下面包含两个文件夹file和file6,file里面包含ggg文件夹,ggg里并不包含fff文件夹。因为我们下面已经把fff文件夹重命名为file6,并且把这个文件夹移到了file06下面,和file同一层路径。
5、删除操作:(如果是对文件夹操作的话文件夹必须是空的,否则不能删除)
boolean delete():删除此抽象路径名表示的文件或目录,删除失败返回false
void deleteOnExit(): 在虚拟机终止时,请求删除此抽象路径名表示的文件或目录。在程序退出时删除指定文件
6、确认操作:
boolean compareTo(File pathName):按字母顺序比较两个抽象路径名。
boolean exists():测试此抽象路径名表示的文件或目录是否存在。
boolean isAbsolute():测试此抽象路径名是否为绝对路径名。
boolean isDirectory():测试此抽象路径名表示的文件是否是一个目录。
boolean isFile():测试此抽象路径名表示的文件是否是一个标准文件。
boolean isDirectory() 测试此抽象路径名表示的文件是否是一个目录(文件夹)。
boolean isHidden():测试此抽象路径名指定的文件是否是一个隐藏文件。
7、获取信息
String getName() : 返回由此抽象路径名表示的文件或目录的名称。
String getPath():将此抽象路径名转换为一个路径名字符串。
long length():返回由此抽象路径名表示的文件的长度,单位byte,如果希望返回KB,则把该值 /1000 即可,并且强制转成float类型。
String[] list():返回一个字符串数组,这些字符串指定此抽象路径名表示的目录中的文件和目录。
File getAbsoluteFile() :返回此抽象路径名的绝对路径名形式,返回一个File对象,可以获取之后调用其他方法来使用。
String getAbsolutePath():返回此抽象路径名的绝对路径名字符串,返回一个字符串,仅用来保存路径名。
String getParent():返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回 null。如果当前文件路径是相对路径,没有父目录,但仍要使用父目录,则可以使用 file.getAbsoluteFile().getParent() 先获取绝对路径的文件,再在绝对路径的基础上获得父目录。
File getParentFile():返回此抽象路径名父目录的抽象路径名;如果此路径名没有指定父目录,则返回 null。
long getTotalSpace():返回此抽象路径名指定的分区大小。
long getUsableSpace():返回此抽象路径名指定的分区上可用于此虚拟机的字节数。
8、文件夹的遍历
public static void main(String[] args) {
printFiles(new File("G:/Android/代码"), 1);
}
public static void printFiles(File dir , int tab) {
if (dir.isDirectory()) {
File next[] = dir.listFiles() ;
for (int i = 0; i < next.length; i++) {
for (int j = 0; j < tab ; j++) {
System.out.print("|--");
}
System.out.println(next[i].getName());
if (next[i].isDirectory()) {
printFiles(next[i], tab+1);
}
}
}
}
如上,即可遍历出我的磁盘上 G:/Android/代码 文件夹下面的所有文件及文件夹。
9、文件的读写
读取文件:
File file = new File("test.txt") ;
FileInputStream fis = new FileInputStream(file); //创建文件输入流,字节流
InputStreamReader isr = new InputStreamReader(fis, "GBK") ; //创建输入流的reader,字符流
BufferedReader br = new BufferedReader(isr) ; //创建带有缓冲的输入reader
String lineString ; //用来存储读取到的一行数据
while ((lineString = br.readLine()) != null) { //readLine读取一行数据
System.out.println(lineString);
}
//关闭数据流,先打开的后关闭
br.close();
isr.close();
fis.close();
然后对以上添加try/catch即可。其中file是要读取的文件。
写入文件:
方式同读取一样,创建三个流,来写入文件,最后依次关闭三个流。
File newFile = new File("newtest.txt") ;
FileOutputStream fos = new FileOutputStream(newFile) ; //创建输出流
OutputStreamWriter osw = new OutputStreamWriter(fos, "GBK") ;
BufferedWriter bw = new BufferedWriter(osw) ;
bw.write("床前明月光\n");
bw.write("疑是地上霜\n");
bw.write("举头望明月\n");
bw.write("低头思故乡\n");
bw.close();
osw.close();
fos.close();