第九天,学习一下IO流,用到的机会比较少,但是遇到了一定要能写出来
一、IO流
IO流分为字节流和字符流,它又都可以再分为输入和输出。字节流可以输入输出所有文件,但是涉及到文本相关的内容时,由于中文字符占了不止一个字节,会导致识别时出现问题。字符流操作文本相关文件时,较为方便,但是传输其他文件会导致文件无法正常运行。除了这两种流之外,还有缓冲流和转换流,一个用于按行读取文本文件,一个用于传输时转换文件的编码方式。
1.1 流的通用形式
try {
1.创建流
2.流的相关操作
3.关闭流
} catch (Exception e) {
e.printStackTrace();
}
1.2 字节流
用字节流传输文件:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class StreamTest {
public static void main(String[] args) {
try {
InputStream input = new FileInputStream("D:/A/m1.jpg");
OutputStream output = new FileOutputStream("D:/B/m1.jpg");
byte[] buf = new byte[1024];
int len;
while ((len = input.read(buf)) != -1) {
output.write(buf, 0, len);
}
output.close();
input.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
D盘下的A文件夹中的m1.jpg图片被复制到了B文件夹中。
1.3 字符流
读取文本中的一段文字:
import java.io.FileReader;
import java.io.Reader;
public class StreamTest {
public static void main(String[] args) {
try {
Reader input = new FileReader("D:/A/t1.txt");
char[] buf = new char[1024];
String str = "";
int len;
while ((len=input.read(buf) )!= -1) {
str += new String(buf,0,len);
}
System.out.println(str);
input.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
import java.io.FileWriter;
import java.io.Writer;
public class StreamTest {
public static void main(String[] args) {
try {
Writer output = new FileWriter("D:/A/t1.txt", true);
String str = "这是第二段文字";
output.write(str);
output.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
Writer output = new FileWriter("D:/A/t1.txt", true);
这里的 true 表示添加内容的时候是在文本的最后添加,而不是覆盖原来的内容。
1.4 缓冲流
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.Reader;
public class StreamTest {
public static void main(String[] args) {
try {
Reader reader = new FileReader("D:/A/t2.txt");
BufferedReader input = new BufferedReader(reader);
String row;
while ((row = input.readLine()) != null) {
System.out.println(row);
}
input.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
1.5 转换流
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
public class StreamTest {
public static void main(String[] args) {
try {
InputStream in = new FileInputStream("D:/A/t3.txt");
InputStreamReader reader = new InputStreamReader(in, "UTF-8");
BufferedReader input = new BufferedReader(reader);
String row = "";
while ((row = input.readLine()) != null) {
System.out.println(row);
}
input.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行结果:
InputStreamReader reader = new InputStreamReader(in, "UTF-8");
这里在 InputStreamReader() 方法的第二个参数位置,可以填文本文件的编码格式,来防止出现乱码现象。