Java IO编程

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 普通 读取一行数据,默认一"\n"为分隔符

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) 普通 设置读取的分隔符

11.对象序列化

posted @ 2018-09-29 13:48  魏大大  阅读(149)  评论(0编辑  收藏  举报