Java-IO(输入输出)流

IO流

分类

方向:输入流,输出流

单位:字节流,字符流

代码中具体分类

输入流:

字节:InputStream

字符: Reader

输出流:

字节:OutputStream

字符: Write

输入输出都是抽象类,无法直接创建

输入用FileInputStream类实现

输出用FileoutputStream类实现

字节输入流FileInputStream

读取输入流的三种方式

Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.ifueen.classtest.fileinputstream;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import com.sun.org.apache.bcel.internal.generic.NEW;

public class FileInputStreamTest {
/*
* 输入流
* */
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
FileInputStream file = new FileInputStream("my.txt");

//第一种读取
/*int c = file.read();; //定义变量接收每次读取的值
while (c!=-1) { //判断是否还有字符
System.out.print((char)c); //打印输出
c = file.read();
}*/

//第二种读取
byte [] arr = new byte[2]; //定义数组来决定每次读取的元素

/*int num=file.read(arr);
while (num!=-1) {
String string = new String(arr,0,num);
System.out.print(string);
num=file.read(arr);
}*/

//第三种读取

byte [] arr1 = new byte[4];
int read = file.read(arr1, 0, 4);
while (read!=-1) {
System.out.print(new String(arr1));
read = file.read(arr1, 0, 4);
}

}

}

字节输出流FileOutputStream

输出的几种方式

Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package com.ifueen.classtest.fileoutputstream;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileOutputStreamTest {
/*
* 输出流
* */
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
//第一种输出
FileOutputStream output = new FileOutputStream("sb.txt");
//output.write(5986);

//第二种输出
byte [] arr = {15,36,89,66,15,69};
//output.write(arr);

//第三种:输出为中文

String str = "乌斯怀亚的灯塔";
byte[] bytes = str.getBytes(); //利用方法转换为byte数组
output.write(bytes);
for (byte b : bytes) {
System.out.println(b);
}

//第四种:不覆盖以前内容
FileOutputStream output1 = new FileOutputStream("sb.txt",true);
String str1 = ",亮着...亮着...";
byte[] bytes1 = str1.getBytes(); //利用方法转换为byte数组
output.write(bytes1);

}

}

字符输入流FileReader

Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package com.ifueen.classtest.reader;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

import com.sun.org.apache.bcel.internal.generic.NEW;

public class ReaderTest {
/*
* 读取字符流
* */
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
//第一种方式
FileReader reader = new FileReader("sb.txt");
//int read = reader.read();
//System.out.println(read);

//第二种方式
char[] arr = new char[3];
int n;
while((n=reader.read(arr,0,3))!=-1){
System.out.print(new String(arr,0,n));
}

}

}

字符输出流FileWriter

Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.ifueen.classtest.writer;

import java.io.FileWriter;

public class WriterTest {
/*
* 字符输出流
* */
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
FileWriter fileWriter = new FileWriter("能不能给我吃一口.txt");
String str = "就不能给我吃一口吗";
char[] cs = str.toCharArray();
fileWriter.write(cs);
fileWriter.flush(); //刷新缓冲区
fileWriter.close(); //关闭输出流


//不覆盖内容的输出
FileWriter fileWriter1 = new FileWriter("能不能给我吃一口.txt",true);
String str1 = ",我再也快乐不起来了";
char[] cs1 = str1.toCharArray();
fileWriter1.write(cs1);
fileWriter1.flush(); //刷新缓冲区
fileWriter1.close(); //关闭输出流
}

}

编码问题

编码和解码的时候编码集不一致

编码:按照某种编码集去存储数据

解码:按照某种编码集去读取数据

乱码问题:

1.读取中文数据的时候,只取了部分字节

2.编码和解码的解码集不一致,最常用的是UTF-8

3.有些编码集本身就不支持中文ISO

转换流

字节输入流转换为字符流 InputStreamReader

字符输入流转换为字节流 OutputStreamWriter

异常的处理

​ 传统的方式 try{
​ 可能出现异常的代码
​ }catch(Exception e){
​ 对异常进行处理
​ }finally{
​ 最终执行的代码
​ }
​ 先开后关
jdk1.7 对于需要关闭的流新的方式
​ try(需要关闭的资源){
​ }catch(Exception e){
​ 对异常进行处理
​ }

jdk1.7写法Demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package com.ifueen.classtest.exception;

import java.io.FileInputStream;
import java.io.FileOutputStream;import com.sun.org.apache.bcel.internal.generic.NEW;

public class ExceptionDemo {
/*
* 异常Demo
* */
public static void main(String[] args) {
// TODO Auto-generated method stub
try( FileInputStream inputStream = new FileInputStream("sb.txt"); //这里存放需要关闭的代码
FileOutputStream outputStream = new FileOutputStream("sb.txt")){
//这里存放可能会出错的代码
byte [] arr = new byte[50];
int read = inputStream.read(arr);
while (read!=-1) {
System.out.println(new String(arr,0,read));
read = inputStream.read(arr);
}
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}
❤赏点钱让我买杯快乐水8❤