简谈java IO流
简谈java IO流
概念:java IO流(input/output),就是java中对计算机的输入输出流
(在这里,我只简单介绍4种方式:分别是字节流的输入输出、字符流的输入输出)
网上的一张较为集全的IO流总图:
我这里讲的是
字节流:转换成字节方式,进行操作计算机中的文件
InputStream中的FileInputStream
OutputStream中的FileOutputStream
字符流:因为乱码的问题,需要将一些文件转成字符方式,进行操作计算机中的文件
Reader中的FileReader
Writer中的FileWriter
转换流:
InputStreamReader
OutputSteamWriter:
字节流
字节输入流:FileInputStream:
1.介绍:是一种较为常用的字节输入流,经常作为读取文件的一种输入流
构造函数:
FileInputStream(File file)
返回一个字节输入流对象,该对象使用字节流读取文件,参数为File类型关联实体文件
FileInputStream(String name)
返回一个字节输入流对象,传入的name为路径+文件名
2.使用:
FileInputStream inputStream = new FileInputStream(new File
("D:/work/STS/JavaSE-Day24-IO/1.txt"));
//System.out.println(inputStream.read());
//System.out.println((char)inputStream.read());
//循环遍历读取数据
int n;
while ((n=inputStream.read())!=-1) {
System.out.println((char)n);
}
//关闭输入流
inputStream.close();
字节输出流FileOutputSteam
- 介绍:是一种比较常见的字节输出流,复制文件常用的一种方式
构造函数:
FileOutputStream(File file)
返回一个字节输出流对象,参数为File类型关联实体文件
FileOutputStream(String name)
返回一个字节输出流对象,参数为String类型,取值为路径+文件名
向文件中设置是否追加数据:
FileOutputStream(File file, boolean append)
返回一个字节输出流对象,参数1File类型关联实体文件,参数2布尔值true代表追加
FileOutputStream(String name, boolean append)
返回一个字节输出流对象,参数1String类型关联实体文件,参数2布尔值true代表追加
2.使用
FileOutputStream fos = new FileOutputStream
("D:/work/STS/JavaSE-Day24-IO/2.txt");
byte[] b="abcdefghijk".getBytes();
fos.write(b); //传入的是一个byte类型的数组
fos.close();
字符流
字符输入流的FileReader:
1.介绍:在读取中文内容文件中,也是使用比较多的一种方式
FileReader(File file)
返回一个字符输入流对象,该对象使用字符流读取文件,参数为File类型关联实体文件
FileReader(String name)
返回一个字符输入流对象,传入的name为路径+文件名
2.使用:
FileReader fr = new FileReader(new File
("D:/work/STS/JavaSE-Day24-IO/1.txt"));
//System.out.println(fr.read());
//循环遍历读取数据
int n;
while ((n=fr.read())!=-1) {
System.out.println((char)n);
}
//关闭输入流
fr.close();
字符输出流的FileWriter:
1.介绍:在操作文档文件中,使用比较多的一种方式
构造函数:
FileWriter(File file)
返回一个字符输出流对象,参数为File类型关联实体文件
FileWriter(String name)
返回一个字符输出流对象,参数为String类型,取值为路径+文件名
向文件中设置是否追加数据:
FileWriter(File file, boolean append)
返回一个字符输出流对象,参数1File类型关联实体文件,参数2布尔值true代表追加
FileWriter(String name, boolean append)
返回一个字符输出流对象,参数1String类型关联实体文件,参数2布尔值true代表追加
2.使用:
FileWriter fw = new FileWriter
(new File("D:/work/STS/JavaSE-Day24-IO/2.txt"));
fw.write(97); //97 是ASCII码值,文件中写入的是a
fw.close();
转换流
InputStreamReader:字节输入流转字符输入流
1.介绍:
先使用字节流读取包含中文的文件并输出
优化字节流读取文件时可能出现的乱码问题
构造函数:
将字节流转换为字符流,使用InputStreamReader构造函数
InputStreamReader(InputStream in)
将字节流对象包装成一个InputStreamReader对象,默认使用本机字符编码
InputStreamReader(InputStream in,String charset)
将字节流对象包装成一个InputStreamReader对象,使用指定的编码格式
2.使用:
FileInputStream fis = new FileInputStream
("D:/work/STS/JavaSE-Day24-IO/src/cn/itsource/readerandwriter/ReaderAndWriterTest.java");
//将字节流包装为字符流
InputStreamReader isr = new InputStreamReader(fis);
char[] c=new char[4];
int len;
StringBuilder build=new StringBuilder();
while ((len=isr.read(c))!=-1) {
build.append(new String(c));
}
System.out.println(build.toString());
isr.close();
fis.close();
OutputSteamWriter:字符输出流转字节输出流
- 介绍:
将字符流转换为字节流(构造函数)
OutputStreamWriter(OutputStream out)
将一个字符流中的数据内容写入到转换为显示指定的字节流对象
OutputStreamWriter(OutputStream out,String charset)
使用指定的编码格式将字符流转换为字节流
- 使用
FileOutputStream fos = new FileOutputStream
("D:/work/STS/JavaSE-Day24-IO/5.txt"); //字节流关联实体文件
OutputStreamWriter osw = new OutputStreamWriter(fos); //字符流输出
osw.write("输出中文");
osw.close();
fos.close();
这里就是简单讲解这四种方式,如果一些建议可以评论一下,谢谢。