IO中,读取文件和写入文件的方法。

image.png

  • 读取文件和写入文件的方法
    核心类的核心方法:
    InputStream:
    int read(byte[ ] b , int off , int len)
    三个参数:
  • 第一个参数是一个byte类型的数组,read读取的数据放在这个byte类型的数据中
  • 第二个参数是是偏移量offset的缩写,读进去来的数据从第几位开始放:比如读取的是10个字节,int off 是0,意思就是把读取的来的字节,从0开始,一个个放进去;如果int off 是5,则byte数组的第五位开始读
  • 第三个参数是length,意思是read一词读取数据,最多读多少次数据
  • 返回值是这次调用这个方法总共读取了多少个字节的数据,读取的是10,则返回的就是10
  • 一般来讲,int off 是0,int len就是数组的长度
    OutputStream:
    void write(byte[ ] b , int off , int len )
  • 第一个参数是一个byte类型的数组,将需求斜入的文件放在这个数组中
  • 第二个参数是是偏移量offset的缩写,数组中的数据从第几位开始写:比如10个字节,int off 是0,意思就是从0开始写;如果int off 是5,则byte数组的第五位开始写
  • 第三个参数是length,意思是总共最多写入多少字节的数据
  • 一般来讲,int off 是0,int len就是数组的长度
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
输入demo:
//第一步:导入包,因为java io类都在io包中 “*”代表全部导进来的意思
import java.io.*;
class Test{
//声明FileInputStream这个类的引用
FileInputStream fis = null;

//需要try catch 因为读取文件未知,可能发生异常
try{
//生成代表输入流的对象,并传入所需要读取的数据源当前文件夹目录
fis = new FileInputStream("d:/work/src/from.txt")

//new一个数组,因为字节流的传输需要数组
byte [] buffer = new byte[100]; //数组长度设为100

//调用输入对象的read方法,传入数组名,偏移量,长度,读取即可
fis.read(buffer , 0 ,buffer.length);

//把buffer字节数组转化为字符串(不转的话打印出来的是字节码)
String s= new String(buffer); //一个带数组参数的构造函数

//调用trim方法,去掉字符串的首尾空格(中间的空格去不掉)和空字符
s = s.trim();

//遍历数组
for(int i = 0 , i < buffer.length , i++){

System.out.println(buffer[i]);
}
}
catch(Exception e){
System.out.println(e)
}
finally{
try{
//关闭流也可能会出现异常,所以也需要try catch
fis.close;
}
catch(Exception e){
System.out.println(e)

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
输出流demo(先要读取到,再写入):
import java.io.*;
class Test{
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream("d:/work/src/from.txt")
fos = new FileOutputStream(d:/work/src/to.txt);
byte[] buffer =new byte[100];

//临时变量 int temp,代表读取字节的长度
int temp = fis.read(buffer , 0 , buffer.length)
fos.write(buffer , 0 , temp);
}
catch(Exception e){
System.out.println(e);
}
finally(Exception e){
System.out.println(e);
}
}
  • 大文件的读写方法
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
输出流demo(先要读取到,再写入):
//大文件字节太多,需要一次读一部分,先把一部分数据放到数组中,写入,让后再读取一部分,也就是需要循环读写
import java.io.*;
class Test{
FileInputStream fis = null;
FileOutputStream fos = null;
try{
fis = new FileInputStream("d:/work/src/from.txt")
fos = new FileOutputStream(d:/work/src/to.txt);
byte[] buffer =new byte[1024]; //以1024为单位,1k = 1024字节

while(true){ //while循环,布尔值为真,运行一次,读取一次数据,每次读1024个字节
int temp = fis.read(buffer , 0 , buffer.length)
if(temp == -1){ //当长度为-1时,跳出循环(读到文件尾部,就是-1了)
break;
}
fos.write(buffer , 0 , temp); //读一次写一次
}

}
catch(Exception e){
System.out.println(e);
}
finally(Exception e){
fis.close;
fos.close;
System.out.println(e);
}
}