java基础学习IO流之字符流十一 -3

    xiaoxiao2021-03-25  129

    字符流:

    字符输入流读取数据Reader 字符输出流 写入数据Writer

    FileWriter的使用:

    package io2; import java.io.File; import java.io.FileWriter; import java.io.IOException; /** * * @author Angus * IO流: * 字节流: * 字节输入流 读取数据 InputStream * 字节输出流 写入数据 OutputStream * 字符流 * 字符输入流 读取数据 Reader * 字符输出流 写入数据 Writer * * 需求; 我要把一句话 “hello,io ”,我来了。。写入TXT文件中 * * Writer是一个抽象类,需要用到子类FileWriter * 构造: * FileWriter(File file) * FileWriter(String fileName) */ public class FileWriterDemo { public static void main(String[] args) throws IOException { File file = new File("a.txt"); // if(!file.exists()){ // file.createNewFile(); // } // FileWriter fw = new FileWriter(file);//会自动创建文件 //直接创建不需要new File FileWriter fw = new FileWriter("a.txt"); //调用写数据的功能 //write(String str) fw.write("“hello,io ”,我来了。。"); /* * 字符流 * 1字符 = 1字节 * 文件数据底层单位是字节,而我们是字符,不能直接把数据写入文件 * 缓冲区概念 */ //刷新缓冲区 fw.flush(); //所有IO流的操作需要释放释放资源。。 fw.close(); } } 结果:

    测试发现不刷新flush直接关闭close也可以写入数据

    原因:

    加入标准化异常如理代码规范;

    package io2; import java.io.File; import java.io.FileWriter; import java.io.IOException; /** * * @author Angus 加入标准异常处理的代码 */ public class FileWriterDemo { public static void main(String[] args) { FileWriter fw = null; try { fw = new FileWriter("b.txt"); fw.write("哈哈哈哈"); fw.flush(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (fw != null) { try { fw.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }

    写入方法汇总,换行和追加操作

    package io2; import java.io.File; import java.io.FileWriter; import java.io.IOException; /** * @author Angus 加入标准异常处理的代码 * 1;写入数据有五种方式 * write(char[] cbuf) * write(char[] cbuf, int off, int len) * write(int c) * write(String str) * write(String str, int off, int len) * * 换行操作; * 需要换行符 * windows \r\n * Linux \n * mac \r * * 追加操作; * 发现每次运行都是覆盖操作,没有追加 * FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。 */ public class FileWriterDemo { public static void main(String[] args) throws IOException { FileWriter fw = new FileWriter("d.txt"); // fw.write('a'); //write(char[] cbuf) char[] ch = {'a','d','s','d','f'}; fw.write(ch); //write(char[] cbuf, int off, int len) fw.write(ch, 0, 3); //write(String str) fw.write("呵呵呵哒\n"); //这样在不同软件中识别不同的换行符 \n在记事本中不行 fw.write("呵呵123213\r\n"); //windows下需要\r\n //write(String str, int off, int len) String str = "asdasdalkshd"; fw.write(str, 0, 4); //追加操作 每次运行都是覆盖操作, fw.flush(); fw.close(); FileWriter fw2 = new FileWriter("f.txt",true); fw2.write("asdasdalkshd\r\n"); fw2.flush(); fw2.close(); } } 换行;

    追加;

    FileReader读取数据

    读取数据的单间操作

    package io2; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; /** * @author Angus * FileReader读取数据 * * A:创建字符输入流对象 * B:调用读取功能 * C;释放资源 * * int read()读取单个字符 每次只能读取一个字符,也就是说需要多次读取才能获取全部内存 * 当读取到最后一个字符的时候返回-1 */ public class FileReaderDemo { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("d.txt"); //读取 // int read = fr.read(); // System.out.println(read); //输出的是数字ACll // System.out.println((char)read); int ch = fr.read(); while(ch != -1){ System.out.print((char)ch); //再次读取 ch = fr.read(); } fr.close(); } } 复制文本

    package io2; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * @author Angus * FileReader * 复制文本 * * A;读取文本 * b;写入文本 * C关闭 * */ public class FileReaderDemo { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("d.txt"); FileWriter fw = new FileWriter("f.txt"); //读取数据 int ch = 0; while((ch = fr.read())!= -1){ fw.write(ch); } fw.close(); fr.close(); } } 读取多个字符,在开发中提高读取效率:

    package io2; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * @author Angus * FileReader * 读取一个字符数组 * * read(char[] cbuf) 将字符读入数组 */ public class FileReaderDemo { public static void main(String[] args) throws IOException { FileReader fr = new FileReader("d.txt"); //读取 char[] chs = new char[4]; int len = fr.read(chs); //一次读取了4了字符 // System.out.println(chs); // System.out.println(len); //多次读取发现 读取结束 len返回-1 while(len != -1){ System.out.print(chs); len = fr.read(chs); } //开发中写的方式 char[] chs2 = new char[1024]; int len2 = 0; while((len = fr.read(chs2)) != -1){ System.out.print(new String(chs2,0,len)); } fr.close(); } }

    最后附上JDK使用文档API 下载

    转载请注明原文地址: https://ju.6miu.com/read-5029.html

    最新回复(0)