IO:在设备和设备之间的一种数据传输!
IO流的分类:
按流的方向分:
输入流: 读取文件 (e:\\a.txt):从硬盘上文件读取出来后输出这个文件的内容
输出流: 写文件:将e:\\a.txt 内容读出来--->写到f盘下
按数据的类型划分:
字节流
字节输入流:InputStream :读取字节
字节输出流:OutputStream :写字节
字符流
字符输入流:Reader :读字符
字符输出流:Writer :写字符
需求:在当项目下输出一个文件,fos.txt文件(文本文件)
只要文本文件,优先采用字符流,字符流在字节流之后出现的
使用字节流进行操作
无法创建字节输出流对象:OutputSteam :抽象类,不能实例化
又学习过File类,并且当前是对文件进行操作,子类:FileOutputSteam进行实例化
File+InputStream
File+OutputStream
FileXXX (FileReader)
FileXXX (FileWriter)
开发步骤:
1)创建字节输出流对象
2)写数据
问题:
写一些数据,这些数据并没有换行,如何实现换行的效果...
针对不同的操作系统,里面的换行符合不一样的
windows: \r\n
Linx:\n
mac:\r
一些高级记事本针对任意的换行会有换行的效果
问题:如何末尾追加数据呢
public FileOutputStream(File file, boolean append):指定为true,末尾追加数据
举例:
InputStream抽象类:字节输入流
FileInputStream
构造方法:
public FileInputStream(String name)
开发步骤:
1)创建字节文件输入流对象
2)读数据
3)释放资源
读数据方式:
public abstract int read():一次读取一个字节
将当前项目下的a.txt文件的内容读取出来,复制到b.txt文件中
源文件: a.txt ---> 读取文件的内容---->FileInputStream
目的地文件: b.txt----> 输出文件 --->FileOutputStream
本身读写操作:
IO流的分类:
按流的方向分:
输入流: 读取文件 (e:\\a.txt):从硬盘上文件读取出来后输出这个文件的内容
输出流: 写文件:将e:\\a.txt 内容读出来--->写到f盘下
按数据的类型划分:
字节流
字节输入流:InputStream :读取字节
字节输出流:OutputStream :写字节
字符流
字符输入流:Reader :读字符
字符输出流:Writer :写字符
需求:在当项目下输出一个文件,fos.txt文件(文本文件)
只要文本文件,优先采用字符流,字符流在字节流之后出现的
使用字节流进行操作
无法创建字节输出流对象:OutputSteam :抽象类,不能实例化
又学习过File类,并且当前是对文件进行操作,子类:FileOutputSteam进行实例化
File+InputStream
File+OutputStream
FileXXX (FileReader)
FileXXX (FileWriter)
开发步骤:
1)创建字节输出流对象
2)写数据
3)关闭资源
举例:
public class FileOutputStreamDemo1 { public static void main(String[] args) throws Exception{ //OutputStream out =new FileOutputStream("fos.txt");// 多态 //创建字节输出流 //1)构造了输出流对象 //2)指向了当前目录下输出fos.txt FileOutputStream f=new FileOutputStream("fos.txt"); //写数据 //1)将文件和和流对象不建立关系了 //2)及时释放掉流对象所占用的空间 f.write("hello".getBytes()); f.close(); //f.write("java".getBytes()); } }
注释:OutputStream字节输出流不能创建对象,可以通过多态对子类进行实例化
关于字节输出流写数据的方法
public void write(int b):一次写一个字节
public void write(byte[] b) :一次写一个字节数组
public void write(byte[] b, int off,int len):一次写一部分字节数组
举例:
public class FileOutputStreamDemo2 { public static void main(String[] args) throws IOException { //构造一个字节输出流对象 FileOutputStream f=new FileOutputStream("f2.txt"); //写数据 f.write(97); f.write(126); f.write(127); byte[] b= {97,98,99,100}; f.write(b); f.write(b, 0, 3); f.close(); } }需求:输出文本文件,给文本文件中添加一些数据
问题:
写一些数据,这些数据并没有换行,如何实现换行的效果...
针对不同的操作系统,里面的换行符合不一样的
windows: \r\n
Linx:\n
mac:\r
一些高级记事本针对任意的换行会有换行的效果
问题:如何末尾追加数据呢
public FileOutputStream(File file, boolean append):指定为true,末尾追加数据
举例:
public class FileOutputStreamDemo3 { public static void main(String[] args) throws IOException { FileOutputStream f=new FileOutputStream("fox3.txt",true); //写数据 for(int i=0;i<10;i++) { f.write(("hello"+i).getBytes()); f.write(("\r\n").getBytes()); } f.close(); } }需求:去读取当前项目下的fis.txt这个文件内容,将文件的内容输出在控制台上
InputStream抽象类:字节输入流
FileInputStream
构造方法:
public FileInputStream(String name)
开发步骤:
1)创建字节文件输入流对象
2)读数据
3)释放资源
读数据方式:
public abstract int read():一次读取一个字节
public int read(byte[] b):一次读取一个字节数组 (读取实际的字节数)
举例:
public class FileInputStreamDemo1 { public static void main(String[] args) throws IOException { FileInputStream f = new FileInputStream("fos.txt"); // 开始读取:第一次读取 // int b=f.read(); // System.out.println(b); // System.out.println((char)(b)); // b=f.read(); // System.out.println(b); // System.out.println((char)b); // 重复读太高,需要while循环 int b = f.read(); while (b != -1) { System.out.println((char) b); b = f.read(); } } }
public int read(byte[] b):一次读取一个字节数组 (读取实际的字节数)
举例:
public class FileInputStreamDemo2 { public static void main(String[] args) throws IOException { FileInputStream f=new FileInputStream("fos.txt"); //第一次读取 // byte[] b=new byte[5]; // int n = f.read(b); // System.out.println(n); // System.out.println(new String(b)); // n=f.read(b); // System.out.println(n); // System.out.println(new String(b)); //代码重复度高 byte[] b=new byte[1024]; int len=0; while((len=f.read(b))!=-1) { System.out.println(new String(b,0,len)); } } }复制文本文件。
将当前项目下的a.txt文件的内容读取出来,复制到b.txt文件中
源文件: a.txt ---> 读取文件的内容---->FileInputStream
目的地文件: b.txt----> 输出文件 --->FileOutputStream
本身读写操作:
读取一个字节,写一个字节,针对不会出现中文乱码的问题..
扫描二维码关注公众号,回复:
1129682 查看本文章
举例:
public class CopyDemo1 { //封装目的文件和源文件 public static void main(String[] args) throws IOException { FileInputStream f=new FileInputStream("fos.txt"); FileOutputStream fos=new FileOutputStream("b.txt"); //边读边写 int by=0; while((by=f.read())!=-1) { fos.write(by); } System.out.println("---------"); f.close(); fos.close(); } }
注释:复制图片时会出现乱码现象,如果出现乱码,就用字节流来进行操作