写点什么

Java IO,Java 真实项目案例分享

用户头像
极客good
关注
发布于: 刚刚

| 方法 | 作用 |


| --- | --- |


| length() | 返回由此抽象路径名表示的文件的长度 |


  • <table><tbody><tr><th><code><a href="about:blank#%3Cinit%3E%28java.io.File,java.lang.String%29">File</a>?(<a href="https://blog.csdn.net/File.html">File</a> parent, <a href="https://blog.csdn.net/lang/String.html">String</a> child)</code></th><td><p>从父抽象路径名和子路径名字符串创建新的 <code>File</code>实例。</p></td></tr><tr><th><code><a href="about:blank#%3Cinit%3E%28java.lang.String%29">File</a>?(<a href="https://blog.csdn.net/lang/String.html">String</a> pathname)</code></th><td><p>通过将给定的路径名字符串转换为抽象路径名来创建新的 <code>File</code>实例。</p></td></tr><tr><th><code><a href="about:blank#%3Cinit%3E%28java.lang.String,java.lang.String%29">File</a>?(<a href="https://blog.csdn.net/lang/String.html">String</a> parent, <a href="https://blog.csdn.net/lang/String.html">String</a> child)</code></th><td><p>从父路径名字符串和子路径名字符串创建新的 <code>File</code>实例。</p></td></tr></tbody></table>


传入的路径的字符串如果是相对路径是相对于 Project 所在路径的。


File file = new File("D:\java\file1.txt"); //双\为转义字符


System.out.println(file);


File file2 = new File("D:\java","file2.txt");//父路径,子路径


System.out.println(file2);


File parent = new File("D:\java");


File file3 = new File(parent,"file3.txt");//父路径,子路径


System.out.println(file3);


//获取文件分隔符


String separator=File.separator;


File d=new File("c:"+separator+"test");


if(!d.exists()) {


/*


创建新的目录(文件夹),这里只有一级目录,所以可以使用 mkdir()创建


如果是 C://test//abc,test 目录不存在,必须使用 mkdirs()创建,否则报错


*/


d.mkdirs();


}


System.out.println("这是目录?"+d.isDirectory());


//声明文件


File f=new File("c:"+separator+"test"+separator+"ab.txt");


//判断文件/文件夹是否存在,!表示 flase 时执行下面语句


if(!f.exists()) {


//创建新的文件


f.createNewFile();


}


//获取文件名


System.out.println(f.getName());


//获取上一级目录


System.out.println(f.getParent());


//获取全局路径


System.out.println(f.getPath());


//判断是不是文件


System.out.println(f.isFile());


//获取长度


System.out.println(f.length());


//获取目录下的文件/文件夹


String[] fe=d.list();


//遍历目录下的所有文件


for(String s:fe) {


System.out.println(s);


}


//删除文件


f.delete();


//删除目录


d.delete();


}


public static void listFiles(File[]files){


if (files!=null&&files.length>0){


for (File file : files) {


if (file.isFile()){


if (file.getName().endsWith(".avi")){


if (file.length()>20010241024){


file.delete();


System.out.println(file.getAbsolutePath()+"已被删除");


}


}


}else {


File[] files1 = file.listFiles();


listFiles(files);


}


}


}


}//递归删除大小超过 200MB 的.avi 文件(删除会彻底删除不会到回收站,因此千万不要随便删除文件,尤其是 c 盘的文件)


以上方法可以使用listFiles(FileFilter f)方法简化

什么是 IO 流???

流是一种抽象概念,它代表了数据的无结构化传递(数据的流从源头流到目的地)。按照流的方式进行输入输出,数据被当成无结构的字节序或字符序列。从流中取得数据的操作称为提取操作,而向流中添加数据的操作称为插入操作。用来进行输入输出操作的流就称为 IO 流。比如文件拷贝,包括了输入流和输出流。输入流从文件中读取数据存储到进程(process)中,输出流从进程中读取数据然后写入到目标文件。简而言之,以流的形式对文件读写操作。数据的传输类似”水流"。所有 I/O 都被视为单个的 字节的移动,通过一个称为 Stream 的对象一次移动一个字节。

Java 中 IO 流的分类?

1 按照流的方向:输入流(inputStream)和输出流(outputStream)


2 按照实现功能分:节点流(可以从或向一个特定的地方读写数据(直接对文件的读写操作),如 FileReader)和处理流(是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写如 BufferedReader)


3 按照处理数据的单位: 字节流字符流。分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个)其余的流都是由它们派生出来的。


  • InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输?流。

  • OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。


  1. 字节流:操作 byte 类型数据,主要操作类是 OutputStream、InputStream 的子类;不用缓冲区,直接对文件本身操作。字节流适合所有类型文件的数据传输(因为计算机字节(Byte)是电脑中表示信息含义的最小单位)若只是读写文件,和文件内容无关时,一般选择字节流.

  2. 字符流:操作字符类型数据,主要操作类是 Reader、Writer 的子类;使用缓冲区缓冲字符, 不关闭流就不会输出任何内容。字符流只能够处理纯文本数据,其他类型数据不行,但是字符流处理文本要比字节流处理文本方便。在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流.


**节点流(类)**有:(能直接对文件的读写操作)


  1. 字节流:OutputStream(输出)、InputStream(输入)??-- 子类:FileOutputStream,FileInputStream

  2. 字符流:Writer(输出)、Reader(输入)??-- 子类 FileWriter,FileReader


处理流可以分为****转化流和装饰流


**转化类:**在读取文件的时候会常常遇到乱码,而转化类可以帮助转换为对应的字符编码格式。


OutputStreamWriter(输出流使用),InputStreamReader(输入流使用)


装饰类:在流的传输过程中,使用缓存进行了”装饰“。


  • 字节缓存流:BufferedOutputStream(输出缓存)、BufferedInputStream(输入缓存)

  • 字符缓存流:BufferedWriter(输出缓存)、BufferedReader(输入缓存)




既然有了字节流,为什么还要有字符流?


不管是文件读写还是网络发送接收,信息的最小存储单元都是字节,那为什么 I/O 流 操作要分为字节流操作和字符流操作呢? 因为字节流是由 Java 虚拟机将字节转换得到的,但是这个过程十分耗时,并且,如果不知道编码类型就很容易出现乱码。所以, I/O 流就提供了?个直接操作字符的接口, 方便平时对字符进行流操作。音频,图片等媒体文件使用字节流比较好,如果涉及到字符的话使用字符流比较好。


Java 一个汉字占几个字节



[https://www.cnblogs.com/lslk89/p/6898526.html](


)


字节流和字符流哪个好?


大多数情况下使用字节流会更好,因为字符流是字节流的包装,而大多数时候 IO 操作都是直接操


作磁盘文件、所以任何流在传输时都是以字节的方式进行的(图片,视频等文件都是按字节存储)


如果


【一线大厂Java面试题解析+核心总结学习笔记+最新架构讲解视频+实战项目源码讲义】
浏览器打开:qq.cn.hn/FTf 免费领取
复制代码


对于操作需要通过 IO 在内存中频繁处理字符串的情况使用字符流会好些,因为字符流具备缓冲区,提高了性能。

用户头像

极客good

关注

还未添加个人签名 2021.03.18 加入

还未添加个人简介

评论

发布
暂无评论
Java IO,Java真实项目案例分享