文件可以认为是相关记录(二进制)或者放在一起的数据的集合,目录是比较特殊的文件,目录中还可以存放文件和目录。
文件的本质:二进制数据 00000001 0000010
文件流需要导入相关的依赖包commons-io
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
文件的基本操作
File file=new File("G://aaa//1.txt");
file.canExecute();//文件是否可执行
file.canRead();//文件是否可读
file.canWrite();//文件是否可写
file.createNewFile();//创建文件,特指不包含目录
file.delete();//删除文件
file.deleteOnExit();//退出jvm删除临时文件
file.exists();//文件是否存在true/false
file.isFile();//是不是文件,特指不包含目录
file.isDirectory();//是不是目录
file.isHidden();//是不是隐藏文件
file.listRoots();//通过静态方法获取当前的盘符
file.mkdir();//创建目录
file.list(FilterNamefilter);//文件过虑器
file.lastModified();//文件的最后修改时间
file.length();//文件中的长度--字节数
file.getName();//得到文件的名字
File file1=File.createTempFile("222",".txt",new File("G://aaa//"));//创建临时文件,要求前缀不得少于3个字符
file1.deleteOnExit();//在jvm结束时删除文件
File file2=new File("G://aaa//");
String []files=file2.list();//获取目录下的所有文件和目录
for (int i = 0; i < files.length; i++) {
System.out.println("1111111----"+files[i]);
}
File只能操作文件的属性而不能操作本身及内容,假如涉及到文件的转移,文件的内容的获取和设定都需要借助于流。
文本写入
OutputStream out = new FileOutputStream(file,true);//true表示开启续写
Writer writer=new OutputStreamWriter(out,StandardCharsets.UTF_8);
String str="\n萧炎";
writer.write(str);
writer.flush();//写入数据需要刷新
out.flush(); //同时也需刷新输出流
out.close();
读取文件内容
InputStream in=new FileInputStream(file);
Reader reader=new InputStreamReader(in, StandardCharsets.UTF_8);//防止中文乱码
int temp=-1;
while ((temp=reader.read())!=-1){
System.out.print((char) temp);
}
in.close();
文件过滤器
public class MyFileFilter implements FilenameFilter {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".wmv");//只打印以.wmv结尾的文件
}
}
需要时直接new MyFileFilter()
得到系统盘符
File []files=File.listRoots();//获取当前系统上所有的磁盘
for (int i = 0; i < files.length; i++) {
System.out.println(files[i]);
}
深度优先遍历
public class FileLoop {
public void fileLoop(File dir){
if(dir.isFile()){
System.out.println("=======文件======"+dir.getName());
}else{
System.out.println("=======目录======"+dir.getName());
//得到子目录中的文件和目录,并需要判断是不是文件和目录
//回调
File []fs=dir.listFiles();
for (int j = 0; j < fs.length; j++) {
this.fileLoop(fs[j]);
}
}
}
}
广度优先遍历
public void fileWidth(File dir){
//创建队列
Queue<File> qu=new LinkedList<File>();
//跟目录入队
qu.offer(dir);
while(!qu.isEmpty()){
//出队
File file=qu.poll();
if(file.isFile()){
System.out.println("=======文件======"+file.getName());
}else{
System.out.println("=======目录======"+file.getName());
//得到子目录中的文件和目录,并需要判断是不是文件和目录
//回调
File []fs=file.listFiles();
for (int j = 0; j < fs.length; j++) {
qu.offer(fs[j]);
}
}
}
}