文件流学习

文件可以认为是相关记录(二进制)或者放在一起的数据的集合,目录是比较特殊的文件,目录中还可以存放文件和目录。

文件的本质:二进制数据   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]);
                }
            }
        }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值