底层的最原本的文件字节流的操作:InputStream outputStream
1 .InputStream 和 OutputStream两个字节流都是抽象类,不能进行实例化操作,使用它的子类进行文件按的操作
2.
字节输出流:从内存中按字节流的形式写出到硬盘等存储介质上——FileInputStream
1. 字节输出流和字符输出流是不一样的,字节输出流底层是没有自带的缓冲取得,
2. 如果使用构造方法中中append参数,不指定默认位false那么每次写出的内容将会崔原来的内容进行全面的覆盖,原先的内容全部进行删除的操作,指定位true的话就是追加数据
3. 由于是进行字节操作,所以底层是不会出现乱码的,写出的时候,文件将会按照我们的编译期的平台默认编码进行编码
4. 同样,写出文件的时候会进行文件路径的判断,如果文件存在,则进行写入文件中,如果文件不存在,则会在该路径下新建一个文件,不用担心文件不存在的问题
5. 另外一个容易出现的问题是,使用写出操作的时候,如果是字符串,不能使用字符串的长度进行学粗
6. 字节流写出的两种形式,可以自定义写出,也可以使用字节数组进行接收写出,构造方法的来到都素hi继承自父类的方法,重写实现的 writer(int byte)--->要写出的指定字节个数。
7. 由于每次使用的是字节来进行字节的获取,所以最中的输出,必须要转换成字符进行输出展现,所以String类的实现必须要进行字符串的转换 newString().getBytes();
代码:
public class InputStreamDemo1 {
public static void main(String[] args) throws IOException {
InputStreamReader isr = new InputStreamReader(new FileInputStream("D:\\a.txt"));
//读取数据
//转换流对象由文件字节输入流对象来进行构建
//底层真正来读取数据的是文件字节输入流
//先根据文件字节流来读取数据
//在根据字符流来提示展示数据
//转换流----字节流转换成字符流
char[] cs = new char[10];
int len=0;
//展示数据---字符形式数据
//展示的数据由提供字符流来获取
while((len=isr.read(cs))!=-1){
System.out.println(new String(cs,0,len));
}
//关闭流
isr.close();
}
}
字节输入流——从硬盘上的文件进行读取到内存中进行存储的操作——FileInputStream
1. 字节输入的本质是从硬盘等存储介质中进行数据的读出,所以一定要保证文件的存在性,如果文件不存在,则会 FileNotFoundException异常,中断文件的执行,不能继续程序的执行
2. 字节输入的读取方式主要有两种,直接读取或者自建缓冲区进行读取,读取的时候返回的是读取到的字节的个数,进行字节的个数的记录,其实字节的长度,最后通过字节转换成字符串的形式进行转换字节。
3. 字节读取到末尾的结束标志同样是-1,-1作为文件的末尾的结束标记。
代码演示:
import java.io.FileInputStream;
import java.io.IOException;
public class FileInputStreamDemo1 {
public static void main(String[] args) throws IOException {
//创建文件字节输入流对象
FileInputStream fis=new FileInputStream("D:\\a.txt");
/* //读取文件--->一个字符占三个字节的大小,最终的结尾是 -1进行结尾
int read = fis.read();
System.out.println(read);
int read1 = fis.read();
System.out.println(read1);
int read2 = fis.read();
System.out.println(read2);
int read3 = fis.read();
System.out.println(read3);*/
//进行全部进行读取的操作
//len表示的是字节的多少。每次读取的字节数目,
// 底层通过字节进行编解码的改变,使用字节编码不会有乱码的
//按字节读取,fileInputStream流
int len=0;
//自建缓冲区
byte[] b=new byte[1024]; //自建长度的标志一般不好给
while((len=fis.read(b))!=-1){
//进行文件的读出
System.out.println(new String(b,0,len));
}
//关流
fis.close();
}
}
实现文件的复制:
public class FileCopy {
//实现文件的复制
public static void main(String[] args) throws IOException {
//创建文件字符输入流 读取的前提是文件是存在的,不存在则不能进行读取
FileReader fr=new FileReader("D:\\a.txt");
//创建文件字符输出流
FileWriter fw=new FileWriter("D:\\b.txt");
//实现一读一写的操作即可
int len=0;
//创建缓冲区
char[] cs=new char[1024];
//进行读写的判断
while((len=fr.read(cs))!=-1){
//读取的操作,开始进行写入
fw.write(cs,0,len);
}
fw.flush();
System.out.println("写入成功");
//关闭流
fw.close();
fr.close();
}
}