一、今日学习内容:
今天学习了12.2.1字节流和字符流的内容。
二、遇到的问题:
三、明日计划:
明天计划学习12.2.2过滤流、12.2.3内存操作流、12.2.4缓冲流的内容。
今日学习的具体内容:
字节流和字符流
流 | 输出流(从计算机流入外部) | 对输出流只能进行写操作 |
输入流(从外部流入计算机) | 对输入流只能进行读操作 |
字节流 | 主要操作字节序列的对象,如对二进制文件、图片、影响文件的操作。 |
字符流 | 主要操作字符列的对象,如文本文件 |
1.字节流
(1)输出字节流——OutputStream
OutputStream是所有字节输出流的父类,它是一个抽象类。
OutputStream | FileOutputStream |
ByteArrayOutputStream | |
StreamBufferedOutputStream |
ByteArrayOutputStream、FileOutputStream是两种基本的介质流,分别向Byte数组和本地文件写入数据。ObjectOutputStream和FilterOutputStream的子类都是装饰流。
(2)使用字节输出流OutputStream的定义如下:
public abstract class OutoutStream extends Object implements Closeable,Flushable
在此类中定义了几个常用的方法:
关闭流 | public void close()throws IOException |
写一组数据 | public void write(byte[] b) throws IOException |
写一个数据 | public void write(int b) throws IOException 若想对OutputStream进行实例化且进行文件操作,需要使用FileOutputStream子类 |
构造 | public FileOutputStream(File file )throws FileNotFoundException |
实例——使用字节流追加内容
import java.io.OutputStream; import java.io.IOException; import java.io.FileOutputStream; public class FileOutputStreamDemo2 { public static void main(String [] args) throws IOException { out(); } public static void out()throws IOException{ OutputStream out=null; try { out=new FileOutputStream("D:\\hello.txt",true); String info="Hello php!"; byte []buf=info.getBytes(); out.write(buf); } catch(IOException e) { e.printStackTrace(); } finally { try { if(out!=null) { out.close(); System.out.println("输出完成!"); } } catch(IOException e) { e.printStackTrace(); } } } }
测试截图:
2.输入字节流——InputStream
(1)InputStream是所有字节输出流的父类,它是一个抽象类。
InputStream | FileInputStream |
ByteArrayInputStream | |
StringBufferInputStream |
ByteArrayIntputStream、FileInputStream、StringBufferInputStream是三种基本的介质流,分别向Byte数组、本地文件和StringBuffer中读取数据。ObjectInputStream和FilterInputStream的子类都是装饰流。
(2)使用字节输入流InputStream的定义如下:
public abstract class InoutStream extends Object implements Closeable
在此类中定义了几个常用的方法:
关闭 | public void close()throws IOException |
读取一组内容 | public int read (byte[] b)throws IOException |
读取一个字节 | public abstract int read()throws IOException |
实例——使用字节流输入流读取文件内容
import java.io.IOException; import java.io.FileInputStream; public class FileInputStreamDemo { public static void main(String[] args)throws IOException{ in(); } public static void in(){ FileInputStream input=null; try { input=new FileInputStream("D:\\HelloWorld.java"); byte[] buf=new byte[1024]; int len=-1; while((len=input.read(buf))!=-1) { String s=new String (buf,0,len); System.out.println(s); } } catch(IOException e) { e.printStackTrace(); } finally { try { if(input!=null) { input.close(); } } catch(IOException e) { e.printStackTrace(); } } } }
测试截图:
3.字符流输出流
(1)Writer是字符输出流,是一个抽象类,需要用子类FileWriter来操作文件。
实例——使用字符输出流输入内容
//如果需要追加内容只需要新的构造函数即:
因此只需要
FileWriter fw=new FileWriter("D:\\write.txt",true);该语句即可。
FileWriter fw=new FileWriter("D:\\write.txt");该语句表示每次运行都会覆盖原来的内容。
import java.io.FileWriter; import java.io.IOException; public class WriterDemo { public static void main(String [] args)throws IOException{ write(); } public static void write()throws IOException{ FileWriter fw=new FileWriter("D:\\write.txt",true); fw.write("231133"); fw.close(); } }
测试截图:
4.字符输入流——Reader
FileReader是字符输入流,是一个抽象类,需要同FileReader进行实例化。
实例——使用字符输入流读取内容
import java.io.IOException; import java.io.Reader; import java.io.FileReader; public class ReaderDemo { public static void main(String[] args)throws IOException{ read(); } public static void read()throws IOException{ FileReader fr=new FileReader("D:\\hello.txt"); char[] buf=new char[1024]; int len=-1; while((len=fr.read(buf))!=-1) { String s=new String(buf,0,len); System.out.println(s); } fr.close(); } }
测试截图;