-
输入流 :把数据从
其他设备
上读取到内存
中的流。 -
输出流 :把数据从
内存
中写出到其他设备
上的流。
格局数据的类型分为:字节流和字符流。
-
字节流 :以字节为单位,读写数据的流。
-
字符流 :以字符为单位,读写数据的流。
字节流:字节输入流InputStream 字节输出流OutputStrem
字符流:字符输入流 Reader 字符输出流Writer
java.io.OutputStream
抽象类是表示字节输出流的所有类的超类,将指定的字节信息写出到目的地。它定义了字节输出流的基本共性功能方法。
-
public void close()
:关闭此输出流并释放与此流相关联的任何系统资源。 -
public void flush()
:刷新此输出流并强制任何缓冲的输出字节被写出。 -
public void write(byte[] b)
:将 b.length字节从指定的字节数组写入此输出流。 -
public void write(byte[] b, int off, int len)
:从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。 -
public abstract void write(int b)
:将指定的字节输出流。
-
-
public FileOutputStream(String name)
: 创建文件输出流以指定的名称写入文件。
public class FileOutputStreamConstructor throws IOException { public static void main(String[] args) { // 使用File对象创建流对象 File file = new File("a.txt"); FileOutputStream fos = new FileOutputStream(file); // 使用文件名称创建流对象 FileOutputStream fos = new FileOutputStream("b.txt"); } }
//一次写多个字节或多个 byte [] bytes={-65,-66,-67,68,69}; fos.write(bytes); fos.write("你好".getBytes()); fos.close();
和换行
-
-
public FileOutputStream(String name, boolean append)
: 创建文件输出流以指定的名称写入文件。 -
fos.write("\r\n".getBytes());换行
java.io.InputStream
抽象类是表示字节输入流的所有类的超类,可以读取字节信息到内存中。它定义了字节输入流的基本共性功能方法。
-
-
public abstract int read()
: 从输入流读取数据的下一个字节。 -
public int read(byte[] b)
: 从输入流中读取一些字节数,并将它们存储到字节数组 b中 。
-
-
FileInputStream(String name)
: 通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。
public class FileInputStreamConstructor throws IOException{ public static void main(String[] args) { // 使用File对象创建流对象 File file = new File("a.txt"); FileInputStream fos = new FileInputStream(file); // 使用文件名称创建流对象 FileInputStream fos = new FileInputStream("b.txt"); } }
public class Demo03InputStream { public static void main(String[] args) throws IOException { File file = new File("a.txt"); FileInputStream fis = new FileInputStream("a.txt"); int len = 0; byte[] bytes = new byte[1024]; while ((len = fis.read(bytes)) != -1) { System.out.println(new String(bytes,0,len)); } fis.close(); }
public class Demo04Copy { public static void main(String[] args) throws IOException { long s=System.currentTimeMillis(); //读流 FileInputStream fis = new FileInputStream("1.jpg"); //写流 FileOutputStream fos = new FileOutputStream("2.jpg"); int len=0; byte[] bytes = new byte[1024]; while ((len=fis.read(bytes))!=-1){ fos.write(bytes,0,len); } fos.close(); fis.close(); System.out.println(System.currentTimeMillis()-s); } }
3.字符流
当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以Java提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。
java.io.Reader
抽象类是表示用于读取字符流的所有类的超类,可以读取字符信息到内存中。它定义了字符输入流的基本共性功能方法。
-
public void close()
:关闭此流并释放与此流相关联的任何系统资源。 -
public int read()
: 从输入流读取一个字符。 -
public int read(char[] cbuf)
构造方法
-
FileReader(File file)
: 创建一个新的 FileReader ,给定要读取的File对象。 -
FileReader(String fileName)
: 创建一个新的 FileReader ,给定要读取的文件的名称。
public class FileReaderConstructor throws IOException{ public static void main(String[] args) { // 使用File对象创建流对象 File file = new File("a.txt"); FileReader fr = new FileReader(file); // 使用文件名称创建流对象 FileReader fr = new FileReader("b.txt"); } }
读取字符数据
字符流拷贝
/** * 字节流的拷贝 */ public class Demo07Copy { public static void main(String[] args) throws IOException { //字符读流 FileReader fr = new FileReader("b.txt"); //字符写流 FileWriter fw = new FileWriter("c.txt"); char[] chars = new char[1024]; int len = 0; while ((len = fr.read(chars)) != -1) { fw.write(chars, 0, len); } fr.close(); fw.close(); } }
java.io.Writer
抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。
-
void write(int c)
写入单个字符。 -
void write(char[] cbuf)
写入字符数组。 -
abstract void write(char[] cbuf, int off, int len)
写入字符数组的某一部分,off数组的开始索引,len写的字符个数。 -
void write(String str)
写入字符串。 -
void write(String str, int off, int len)
写入字符串的某一部分,off字符串的开始索引,len写的字符个数。 -
void flush()
刷新该流的缓冲。 -
void close()
关闭此流,但要先刷新它。
构造方法
-
-
FileWriter(String fileName)
: 创建一个新的 FileWriter,给定要读取的文件的名称。
当你创建一个流对象时,必须传入一个文件路径,类似于FileOutputStream。
public class FileWriterConstructor { public static void main(String[] args) throws IOException { // 使用File对象创建流对象 File file = new File("a.txt"); FileWriter fw = new FileWriter(file); // 使用文件名称创建流对象 FileWriter fw = new FileWriter("b.txt"); } }
写入字符数据
字符流拷贝
/** * 字节流的拷贝 */ public class Demo07Copy { public static void main(String[] args) throws IOException { //字符读流 FileReader fr = new FileReader("b.txt"); //字符写流 FileWriter fw = new FileWriter("c.txt"); char[] chars = new char[1024]; int len = 0; while ((len = fr.read(chars)) != -1) { fw.write(chars, 0, len); } fr.close(); fw.close(); } }