java_IO中File类

1.1创建一个新文件
创建文件:
public boolean createNewFile()
throws IOException

import java.io.File;
import java.io.IOException;

public class FileDemo01 {
public static void main(String[] args) {
	File f = new File("\\test.txt");
	
	try {
		f.createNewFile();
	} catch (IOException e) {
		e.printStackTrace();
	} 
}

}
以上已经完成了文件的创建功能,但是如果开发时按照以上的格式编写,肯定会出现错误。
在各个操作系统中,实际上路径的分隔符是不一样的,例如:
*windows中使用反斜杠
*linux中使用正斜杠 /
如果想要让java程序的可以执行继续保持,则最好根据所在的操作系统来自动使用分隔符

public class FileDemo02 {
public static void main(String[] args) {
	System.out.println("pathSeparator:" + File.pathSeparator);		//调用静态常量
	System.out.println("separator:" + File.separator);		//调用静态常量
	
}

}
如果想让java程序继续保持可移植性,那么在编写路径的时候就应该使用File类中的常量,修改之前的程序

import java.io.File;
import java.io.IOException;

public class FileDemo03 {
public static void main(String[] args) {
	File f = new File("d:" + File.separator + "test03.txt");
	
	try {
		f.createNewFile();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
}

}

1.2删除文件
在File类中使用一下方法可以删除文件
public boolean delete()

import java.io.File;
import java.io.IOException;

public class FileDemo04 {
public static void main(String[] args) {
	File f = new File("d:" + File.separator + "test03.txt");
	
	f.delete();
}

}
此时,文件缺失已经删除掉了,但是是不是应该在删除文件之前判断一下文件是不是存在之后再删除更好呢
在File类中可以使用exists()方法判断一个文件是否存在

1.3综合创建、删除文件的操作
现在有一个要求
给定一个路径,如果此文件存在,则删除,如果文件不存在,则创建一个新文件

import java.io.File;
import java.io.IOException;

public class FileDemo06 {
public static void main(String[] args) {
	File f = new File("d:" + File.separator + "test.txt");
	
	if(f.exists()) {
		f.delete();
	}else {
		try {
			f.createNewFile();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

}
从运行的结果中可以发现,所有的操作并不会立刻执行。因为java是通过JVM与底层进行交互的,所以所有的操作需要经过JVM完成,那么就有可能产生延迟
提示:
对于文件的后缀是可有可无的

1.4创建一个文件夹
使用markdir()方法创建一个文件夹
public boolean mkdir()
创建文件夹操作:

import java.io.File;
import java.io.IOException;

public class FileDemo07 {
public static void main(String[] args) {
	File f = new File("d:"+File.separator + "mldn");
	
	f.mkdir();
}

}

1.5列出制定目录的全部文件
如果现在给出了一个目录,则可以直接列出目录中的内容,但是列出的方法在File类中存在两个:
*以字符串数组的形式返回:public String[] list()
*以File数组的形式返回:public File[] listFile()

操作一:使用list()列出全部内容

import java.io.File;
import java.io.IOException;

public class FileDemo08 {
public static void main(String[] args) {
	File f = new File("d:"+File.separator);		//实例化File类的对象
	String str[] = f.list();		//列出给定目录中的内容
	
	for(int i = 0;i < str.length;i++) {
		System.out.println(str[i]);
	}
}

}
运行结果:
$360Section
$RECYCLE.BIN
.temp
2017MySQL
26b6bd8c208637179819b61c20750f5b.jpg
360
360Downloads
360MoveData
360安全浏览器下载
360用户文件
360驱动大师目录
BaiduNetdiskDownload
DUMP1fee.tmp
ECLIPSE
editplus
java
mldn
mycode
myeclipse
pagefile.sys
PTXLocalMirror
sublime
SYDownload
System Volume Information
我的文件
新建文件夹
新建文件夹 (4)
新建文件夹 (6)
李兴华Java视频
架包
百度云网盘
以上只是列出了全部的名字,包括文件夹的名字是或者是文件的名字等

操作二:使用listfeli()列出全部内容

import java.io.File;
import java.io.IOException;

public class FileDemo09 {
public static void main(String[] args) {
	File f = new File("d:"+File.separator);		//实例化File类的对象
	File files[] = f.listFiles();
	
	for(int i = 0;i < files.length;i++) {
		System.out.println(files[i]);
	}
}

}
运行结果:
d:$360Section
d:$RECYCLE.BIN
d:.temp
d:\2017MySQL
d:\26b6bd8c208637179819b61c20750f5b.jpg
d:\360
d:\360Downloads
d:\360MoveData
d:\360安全浏览器下载
d:\360用户文件
d:\360驱动大师目录
d:\BaiduNetdiskDownload
d:\DUMP1fee.tmp
d:\ECLIPSE
d:\editplus
d:\java
d:\mldn
d:\mycode
d:\myeclipse
d:\pagefile.sys
d:\PTXLocalMirror
d:\sublime
d:\SYDownload
d:\System Volume Information
d:\我的文件
d:\新建文件夹
d:\新建文件夹 (4)
d:\新建文件夹 (6)
d:\李兴华Java视频
d:\架包
d:\百度云网盘

后者列出的是完整的路径。

1.6判断一个给定的路径是否是目录

在File类中直接使用:public boolean isDirectory()
给定的路径,判断是否是目录

import java.io.File;
import java.io.IOException;

public class FileDemo10 {
public static void main(String[] args) {
	File f = new File("d:"+File.separator);		//实例化File类的对象
	
	if(f.isDirectory()) {
		System.out.println(f.getPath() + "是目录"  );
	}else {
		System.out.println("不是目录");
	}
}

}

1.7要求:列出制定目录的全部内容
如果给了一个目录,则要求列出次目录的全部文件都列出来,但是列的时候还会存在子文件夹
在这里插入图片描述
应该采用递归的调用形式

import java.io.File;

public class FileDemo11 {
public static void main(String[] args) {
	File my = new File("d:" + File.separator);
	print(my);
}
public static void print(File file) {		//递归调用
	if(file != null) {			//判断对象是否为空
		if(file.isDirectory()) {		//判断是不是目录
			File f[] = file.listFiles();	// 列出全部的文件
			if(f!=null) {
			for(int i = 0;i < f.length;i++) {
				
				print(f[i]);
				}
			}
			
		}else {
			System.out.println(file);
		}
	}

}

}

总结:
1.File类是在java.io包中唯一与文件本身有关的
2.可以使用File类创建、删除等常见的文件操作
3.在使用File类制定路径的时候一定要注意操作系统间的差异,尽量使用separator进行分割

猜你喜欢

转载自blog.csdn.net/weixin_43149344/article/details/83349945