【java】IO流--基本流
·
IO流
前言:本文将介绍IO流中的基本流
IO 流:用于 设备之间数据传输,分为 输入流(读数据)和输出流(写数据)。
- 输入流:文件 → 程序
- 输出流:程序 → 文件
按操作单位分为:
- 字节流:操作所有类型文件(图片、视频、音频、文本等)
- 字符流:只操作纯文本文件(.txt、.java、.md 等)
基本流
输出流:是指从程序输出数据到指定的文件去。
输入流:是指将指定文件的内容读到程序里来。
字节输出流
创建对象:
//1.直接将路径传入字节输出流的构造里
FileOutputStream fos=new FileOutputStream("路径");
//2.先创建文本对象再将文本对象传入构造中
File fos=new File("路径");
FileOutputStream fos=new FileOutputStream(fos);
写入数据的三种函数
void write(int b) 一次写一个字节数据
void write(byte[] b) 一次写一个字节数组数据
void write(byte[] b, int off, int len) 一次写一个字节数组的部分数据
//off:从几索引开始 len:写多少个
最后要记得释放资源
fos.close();
换行续写
在输出流中,如果不开启续写开关,则在创建流的时候关联文件会被清空。
如果开启续写开关则不会被清空。
//换行
String str="\r\n";
byte[] bytes=str.getbyte();
fos.write(bytes);
//续写 在创建对象的时候传入true,表示要续写不是覆盖
FileOutputStream fos=new FileOutputStream("路径",true);
字节输入流
创建对象
//1.直接创建
FileInputStream fis =new FileInputStream("路径")
//2.先创建文档
File fis =new File("路径");
FileInputStream fis =new FileInputStream(fis);
读取数据
read()这个函数就像一个指针一样,读取一个字节就向前加1,直到没有字节为止
int read()
1.它读取返回的是文档中文字的ASCLL码
2.如果读到最后,它会返回-1
1.单字节读取
FileInputStream fis =new FileInputStream("路径")
int b1=fis.read();
如果想返回文字要手动转型为char
System.out.println((char)b1);
fis.close();
2.循环读取
FileInputStream fis =new FileInputStream("路径")
int b;
while((b=fis.read())!= -1)
{
System.out.println(b);
}
fis.close();
文件拷贝
FileInputStream fis =new FileInputStream("路径")
FileOutputStream fos=new FileOutputStream("路径");
int b
while((b=fis.read()) !=-1)
{
fos.write(b);
}
先开的后关
fos.close();
fis.close();
但是上面这种方法一次只能拷贝一个字节,太慢了,于是有了一次拷贝一个数组的方法
FileInputStream fis =new FileInputStream("路径")
FileOutputStream fos=new FileOutputStream("路径");
int len;
byte[] bytes=new byte[1024*1024*5];
len是读取到的字节数
while((len=fis.read(byte)) !=-1)
{
从0开始,一直写到len个字节为止
fos.write(byte,0,len);
}
先开的后关
fos.close();
fis.close();
编码解码
String str="Eng中文";
//编码
//UTF-8
byte[] byte1=str.getBytes();
System.out.println(Arrays.toString(byte1));
//GBK
byte[] byte2=str.getBytes("GBK");
System.out.println(Arrays.toString(byte2));
//解码
String str2=new String(byte1);
用UTF-8解码
System.out.println(str2);
用GBK解码
String str3=new String(byte1,"GBK");
System.out.println(str3);
String str4=new String(byte2,"GBK");
System.out.println(str4);
结果
[69, 110, 103, -28, -72, -83, -26, -106, -121]
[69, 110, 103, -42, -48, -50, -60]
Eng中文
Eng涓枃
Eng中文
在UTF-8中,英文是1个字节,中文是3个字节,在GBK中,英文还是一个字节,而中文是2个字节,所以在转换的时候,如果编码字集不同,就会出现乱码
为了解决这个乱码问题,java里面有另外一组输入输出流,叫字符流,它是字节流+编码集,可以自动识别中英文并且用通一的编码集来进行解码
以上就是 Java 基础字节 IO 流的全部内容。我们学习了字节输入、输出流的创建、读写、文件拷贝,也了解了编码与乱码产生的原因。字节流可以处理任意类型文件,是 IO 流体系的基础。
更多推荐

所有评论(0)