1 IO(Input Output)流概述
- IO流用来处理设备之间的数据传输。
- java对数据的操作是通过流的方式。
- java用于操作流的对象都在IO包中。
- 流按操作数据分为两种:字节流和字符流。
- 流按流向分为:输入流和输出流。
2 IO流常用基流
- 字节流的抽象基类
- InputStream、OutputStream
- 字符流的抽象基类
- Reader、Writer
- 注意:由这四个类派生出来的子类名称都是以其父类作为子类名的后缀,如InputStream的子类FileInputStream,Reader的子类FileReader。
3 FileWriter
3.1 FileWriter简介
- FileWriter是用来写入字符的便捷类。
3.2 FileWriter的构造方法
- 根据给定的File对象构造一个FileWriter对象
public FileWriter(File file) throws IOException
- 根据给定的File对象构造一个FileWriter对象,如果boolean的值为true,则将字符写入文件末尾处。
public FileWriter(File file, boolean append) throws IOException
- 根据给定的文件名构造一个FileWriter对象
public FileWriter(String fileName) throws IOException
- 根据给定的文件名构造一个FileWriter对象,如果boolean的值是true,则将字符写入到文件末尾
public FileWriter(String fileName, boolean append) throws IOException
- 示例:
package java19; import java.io.FileWriter; import java.io.IOException; /** * 2017/10/12 * 说明: */ public class FileWriterDemo { public static void main(String[] args) throws IOException { /** * 创建一个向文件中写入字符数据的字符输出流对象 * 如果文件不存在,则自动创建 * 如果文件存在,则会被覆盖 */ FileWriter writer = new FileWriter("demo.txt"); /** * 调用Writer中的方法 */ writer.write("你好,世界"); //刷新 writer.flush(); //字符输出流关闭 writer.close(); } }
- 注意:在关闭流之后,再调用flush()或wirter()会导致抛出IOException。
- 示例:换行
package java19; import java.io.FileWriter; import java.io.IOException; /** * 2017/10/12 * 说明: */ public class FileWriterDemo { private static final String LINE_SEPARTOR = System.getProperty("line.separator"); public static void main(String[] args) throws IOException { /** * 创建一个向文件中写入字符数据的字符输出流对象 * 如果文件不存在,则自动创建 * 如果文件存在,则会被覆盖 */ FileWriter writer = new FileWriter("demo.txt"); /** * 调用Writer中的方法 */ writer.write("你好,"+LINE_SEPARTOR+"世界"); //刷新 writer.flush(); //字符输出流关闭 writer.close(); } }
- 示例:追加文字,构造方法的第二个参数为true
package java19; import java.io.FileWriter; import java.io.IOException; /** * 2017/10/12 * 说明: */ public class FileWriterDemo { private static final String LINE_SEPARTOR = System.getProperty("line.separator"); public static void main(String[] args) throws IOException { /** * 创建一个向文件中写入字符数据的字符输出流对象 * 如果文件不存在,则自动创建 * 如果文件存在,则会被覆盖 */ FileWriter writer = new FileWriter("demo.txt",true); /** * 调用Writer中的方法 */ // writer.write("你好,"+LINE_SEPARTOR+"世界"); writer.write("haha"); //刷新 writer.flush(); //字符输出流关闭 writer.close(); } }
- 示例:异常处理
package java19; import java.io.FileWriter; import java.io.IOException; /** * 2017/10/12 * 说明: */ public class FileWriterDemo { private static final String LINE_SEPARTOR = System.getProperty("line.separator"); public static void main(String[] args) { /** * 创建一个向文件中写入字符数据的字符输出流对象 * 如果文件不存在,则自动创建 * 如果文件存在,则会被覆盖 */ FileWriter writer = null; try { writer= new FileWriter("demo.txt",true); /** * 调用Writer中的方法 */ // writer.write("你好,"+LINE_SEPARTOR+"世界"); writer.write("haha"); //刷新 writer.flush(); }catch (IOException e){ e.printStackTrace(); }finally { try { if(writer != null){ writer.close(); } } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("关闭流失败"+e.getMessage()); } } } }
4 FileReader
4.1 FileReader简介
- 用来读取字符文件的便捷类。
4.2 FileReader构造方法
- 在给定的文件名中创建一个FileReader对象
public FileReader(String fileName) throws FileNotFoundException
- 在给定的文件中创建一个FileReader对象
public FileReader(File file) throws FileNotFoundException
- 读取单个字符,返回值是作为整数读取的字符,在0~65535之间,如果到达末尾,则返回-1
public int read() throws IOException
- 示例:
package java19; import java.io.FileReader; import java.io.IOException; /** * 2017/10/12 * 说明: */ public class FileReaderDemo { public static void main(String[] args) { FileReader fr = null; try { fr = new FileReader("demo.txt"); int ch = 0; while((ch = fr.read()) != -1){ System.out.print((char)ch); } }catch (IOException e){ e.printStackTrace(); }finally { if(fr != null){ try { fr.close(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("流关闭失败"+e.getMessage()); } } } } }
- 将字符读取数组。返回读取字符的个数,如果已到达末尾,则返回-1
public int read(char[] cbuf) throws IOException
- 示例:
package java19; import java.io.FileReader; import java.io.IOException; /** * 2017/10/12 * 说明: */ public class FileReaderDemo { public static void main(String[] args) { FileReader fr = null; try { fr = new FileReader("demo.txt"); char[] chs = new char[1024]; int length = 0; while((length = fr.read(chs)) != -1){ System.out.print(new String(chs,0,length)); } }catch (IOException e){ e.printStackTrace(); }finally { if(fr != null){ try { fr.close(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException("流关闭失败"+e.getMessage()); } } } } }
5 练习:文件复制
5.1 文件复制方式一
- 示例:
package java19; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * 2017/10/12 * 说明: */ public class FileCopy { public static void main(String[] args) throws IOException { //创建输入流和输出流 FileReader fr = new FileReader("demo.txt"); FileWriter fw = new FileWriter("test1.txt"); //文件复制 int ch = 0; while((ch = fr.read()) != -1){ fw.write(ch); } //关闭流 fr.close(); fw.close(); } }
5.2 文件复制方式二
- 示例:
package java19; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * 2017/10/12 * 说明: */ public class FileCopy { public static void main(String[] args) throws IOException { //创建输入流和输出流 FileReader fr = new FileReader("demo.txt"); FileWriter fw = new FileWriter("test2.txt"); //文件复制 char[] buffer = new char[1024]; int len = 0 ; while((len = fr.read(buffer) )!= -1){ fw.write(buffer,0,len); } //关闭流 fr.close(); fw.close(); } }