1.文件操作类: File
File file = new File(“PATH”)
NO. | 方法 | 类型 | 描述 |
---|---|---|---|
1 | public File(String pathName) | 构造 | 传递完整文件操作路径 |
2 | public File(File parent, String child) | 构造 | 设置父路径与子文件路径 |
3 | public boolean createNewFile() throws IOException | 普通 | 创建新文件 |
4 | public boolean exists() | 普通 | 判断给定路径是否存在 |
5 | public boolean delete() | 普通 | 删除指定路径的文件 |
6 | public File getParentFile() | 普通 | 取得当前路径的父路径 |
7 | public boolean mkdirs() | 普通 | 递归创建多级目录 |
8 | public long length() | 普通 | 取得文件大小,以字节为单位返回 |
9 | public boolean isFile() | 普通 | 判断给定路径是否是文件 |
10 | public boolean isDirectory() | 普通 | 判断给定路径是否是目录 |
11 | public long lastModified() | 普通 | 取得文件的最后一次修改日期时间 |
12 | public String[] list() | 普通 | 列出指定目录中的全部内容 |
13 | public File[] listFiles() | 普通 | 列出所有的路径以File类对象包装 |
2.字节流与字符流
1)字节流--------------------------------------
字节输出流:OutputStream
No. | OutputStream 类的常用方法 | 类型 | 描述 |
---|---|---|---|
1 | public void close() throws IOException | 普通 | 关闭字节输出流 |
2 | public void flush() throws throws IOExcetion | 普通 | 强制刷新 |
3 | public abstract void write(int b) throws IOException | 普通 | 输出单个字节 |
4 | public void write(byte[] b) throws IOException | 普通 | 输出全部字节数组数据 |
5 | public void write(byte[] b, int off, int len) throws IOException | 普通 | 输出部分字节数组数据 |
OutputStream 的子类 FileOutputStream
No. | FileOutputStream 类的常用方法 | 类型 | 描述 |
---|---|---|---|
1 | public FileOutputStream(File file) throws FileNotFoundException | 构造 | 将内容输出到指定的路径,如果文件已存在,则使用新的内容覆盖旧的内容 |
2 | public FileOutputStream(File file,boolean append) throws FileNotFoundException | 构造 | 如果将布尔参数设置为true,表示追加新的内容到文件中 |
OutputStream output = FileOutputStream(file);
OutputStream output = FileOutputStream(file,true);
调用父类方法即可操作文件
字节输入流:InputStream
No. | InputStream 类的常用方法 | 类型 | 描述 |
---|---|---|---|
1 | public void close() throws IOException | 普通 | 关闭字节输入流 |
2 | public abstract int read() throws IOException | 普通 | 读取单个字节,如果已经没有内容返回 -1 |
3 | public int read(byte[] b) throws IOException | 普通 | 将数据读取到字节数组中,同时返回读取长度 |
4 | public int read(byte[] b, int off, int len) throws IOException | 普通 | 将数据读取到部分字节数组中,指定数组接收的长度和数组的偏移量,同时返回读取长度 |
InputStream的子类FileInputStream
No. | FileInputStream 类的常用方法 | 类型 | 描述 |
---|---|---|---|
1 | public FileInputStream(File file) throws FileNotFoundException | 普通 | 设置要读取文件数据的路径 |
2)字符流--------------------------------------
字符输出流:Writer
No. | Writer 类的常用方法 | 类型 | 描述 |
---|---|---|---|
1 | public void close() throws IOException | 普通 | 关闭字符输出流 |
2 | public void flush() throws throws IOExcetion | 普通 | 强制刷新 |
3 | public Writer append(CharSequence csq) | 普通 | 追加数据 |
4 | public void write(String str) throws IOException | 普通 | 输出字符串数据 |
5 | public void write(char[] cbuf) throws IOException | 普通 | 输出字符数组数据 |
Writer类的子类FileWriter
No. | FileWriter类的常用方法 | 类型 | 描述 |
---|---|---|---|
1 | public FileWriter(File file) throws IOException | 构造 | 设置输出文件 |
2 | public FileWriter(File file ,boolean append) throws IOException | 构造 | 设置输出文件以及是否进行追加 |
字符输入流:Reader
No. | Reader 类的常用方法 | 类型 | 描述 |
---|---|---|---|
1 | public void close() throws IOException | 普通 | 关闭字符输入流 |
2 | public int read() throws IOException | 普通 | 读取单个数据 |
3 | public int read() throws IOException | 普通 | 读取单个字符 |
4 | public int read(char[] cbuf) throws IOException | 普通 | 读取数据到字符数组中,返回读取长度 |
5 | public long skip(long n) throws IOException | 普通 | 跳过字节长度 |
Reader类的子类FileReader
No. | FileReader 类的常用方法 | 类型 | 描述 |
---|---|---|---|
1 | public FileReader(File file) throws FileNotFoundException | 构造 | 定义要读取的文件路径 |
字节流与字符流的区别
1)字节流直接与终端文件进行数据交互,字符流需要将数据经过缓冲区处理才与终端文件数据交互。
2)在使用OutputStream 输出数据时即使最后没有关闭输出流,内容也可以正常输出,但是反过来如果使用的是字符输出流Writer,在执行到最后如果不关闭输出流,就表示在缓冲区中处理的内容不会被强制清空,所以就不会输出数据。如果有特殊情况不能关闭字符输出流,可以使用flush()方法强制清空缓冲区。
在实际开发中流的选用原则
在开发中,对于字节数据处理是比较多的,例如:图片,音乐,电影,文字。而字符流最大的好处是它可以进行中文的有效处理。在开发中,如果要处理中文时应优先考虑字符流,如果没有中文问题,建议使用字节流。
3.转换流
通过继承结构可以发现,FileWriter与FileReader都是转换流的子类,也就证明所有要读取的文件数据都是字节数据,所有的字符都是在内存中处理后形成的
字节输入流转字符输入流 InputStreamReader | 字节输出流转字符输出流OutPutStreamWriter | |
---|---|---|
定义结构 | public class InputStreamReader extends Reader | public class OutputStreamWriter extends Writer |
构造方法 | public InputStreamReader(InputStream in) | public OutputStreamWriter(OutputStream out) |
4.案例文件复制
InputStream in = new FileInputStream(inFile);
OutputStream out = new FileOutputStream(outFile);
int tmp = 0 ; //保存每次读取的数据长度
byte data [] = new byte[1024]; //每次读取1024个字节
while((temp=in.read(data)) != -1){ //循环读取数据
out.write(data,0,tmp); //输出数组
}
in.close();
out.close();
5.字符编码
OutputStream output = new FileOutputStream(file);
output.write("你好".getBytes("ISO8859-1")); //设置输出的字符编码
output.close();
6.内存流
假设一种应用需要进行IO操作,但是又不想在磁盘上产生文件,就可以将内存当做一个临时文件进行操作。
内存流:
- 字节内存流(常用)::ByteArrayInputStream(内存字节输入流);ByteArrayOutputStream(内存字节输出流)
- 字符内存流:CharArrayReader(内存字符输入流);CharArrayWriter(内存字符输出流)
内存流定义的构造方法:
- ByteArrayInputStream类构造:public ByteArrayInputStream(byte[] buf)
- ByteArrayOutputStream类构造:public ByreArrayOutputStream()
String str = "hello world";
InputStream input = new ByteArrayInputStream(str.getBytes());
OutputStream output = new ByteArrayOutputStream();
int temp = 0 ;
while((temp=input.read()) != -1 ){
ouput.write(Character.toUpperCase(temp)); //转大写
}
System.out.println(output);
input.close();
output.close();
7.打印流
在java.io包中OutputStream是进行输出操作的最核心控制类,但是利用OutputStream会存在一个问题:所有的输出数据必须以字节类型的数据为主,也就是说如果要输出的数据是int(Integer)、double(Double)、java.util.Date等常用的类型都需要将其转换为字节后才可以输出。为了解决这个问题,java.io中提供了打印流。
java.io.OutputStream类主要是进行数据输出,如果要设计更加合适的打印流操作类,就必须解决OutputStream输出数据类型有限(只有byte类型)的问题。这时可以采用包装设计模式,将OutputStream类利用其它类进行包装、并且可以在这个类中提供了各种常见数据类型的输出操作,这样用户在进行输出操作时就可以回避字节数据的操作。
java.io提供了两个数据打印流的操作类:PrintStream(打印字节流)、PrintWriter(打印字符流)
PrintStream类的常用方法 | 类型 | 描述 |
---|---|---|
public PrintStream(OutputStream out) | 构造 | 通过已有OutputStream确定输出目标 |
public void print(数据类型 参数名称) | 普通 | 输出各种常见的数据类型 |
public void println(数据类型 参数名称) | 普通 | 输出各种常见的数据类型,并追加一个换行 |
PritnStrem与PrintWriter两个类在使用上是完全一样的
8.System类对IO的支持
System类与IO有关的3个对象常量
常量 | 类型 | 描述 | |
---|---|---|---|
1 | public static final PrintStream err | 常量 | 显示器上错误输出 |
2 | public static final PrintStream out | 常量 | 显示器上信息输出 |
3 | public static final InputStream in | 常量 | 键盘数据输入 |
可以发现,err与out两个对象的类型都属于PrintStream 类型,in属于 InputStream类型
9.字符缓冲流
为了可以进行完整数据的输入操作,最好的做法是采用缓冲区的方式对输入的数据进行暂存,而后程序可以利用输入流一次性读取内容。
- 字符缓冲区流:BufferedReader、BufferedWriter
- 字节缓冲区流:BufferedInputStream、BufferedOutputStream
BufferedReader类的常用方法 | 类型 | 描述 |
---|---|---|
public BufferedReader(Reader in) | 构造 | 设置字符输入流 |
public String readLine() throws IOException | 普通 | 读取一行数据,默认一" "为分隔符 |
10.扫描流:Scanner
Scanner类中定义的常用方法 | 类型 | 描述 | |
---|---|---|---|
1 | public Scanner(InputStream source) | 构造 | 接受InputStream输入流对象,此为输入源 |
2 | public boolean hasNext() | 普通 | 判断是否有数据输入 |
3 | public String next() | 普通 | 取出输入数据,以String返回 |
4 | public boolean hasNextXxx() | 普通 | 判断是否有指定类型数据存在 |
5 | public 数据类型 nextXxx() | 普通 | 取出指定数据类型的数据 |
6 | public Scanner useDelimiter(String pattern) | 普通 | 设置读取的分隔符 |