使用 FileReader 和 FileWriter 读取、写出文本数据(字符)

本文介绍了Java中使用FileReader和FileWriter进行文件读写的步骤,包括创建流对象、读写过程以及关闭流资源的方法。强调了异常处理和文件存在的条件,同时列出了相关的关键方法如read和write。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 执行步骤
    • 1.创建读取或写出的File类的对象
    • 2.创建输入或输出流
      • FileReader
        • FileReader(File file): 创建一个新的 FileReader ,给定要读取的File对象。
        • FileReader(String fileName): 创建一个新的 FileReader ,给定要读取的文件的名称。
      • FileWriter
        • FileWriter(File file): 创建一个新的 FileWriter,给定要读取的File对象。
        • FileWriter(String fileName): 创建一个新的 FileWriter,给定要读取的文件的名称。
        • FileWriter(File file,boolean append): 创建一个新的 FileWriter,指明是否在现有文件末尾追加内容。
    • 3.执行具体的读入或写出的过程
      • 读入:read(char [] c)
      • 写出:write(String str)/write(char [] c,0,len)
    • 4.关闭流资源,避免内存泄漏
  • 代码如下:
            File f1=new File("D:\\io\\io1\\Test1.txt");
    		File f2=new File("D:\\io\\io1\\Test2.txt");
    		//2. 创建FileReader/FileWriter流对象,将File类的对象作为参数传递到的构造器中
    		FileReader r = null;
    		FileWriter w2=null;
    		try {
    		r=new FileReader(f1);
    		w2=new FileWriter(f2);
    		/*
    		 * 3.执行具体的读入或写出的过程
    		 * read(char [] c)
    		 * write(String str)/write(char [] c,0,len)
    		 */
    		char [] c=new char [5];
    		int len=0;
    		while((len=r.read(c))!=-1) {
    			for(int i=0;i<len;i++) {
    				System.out.print(c[i]);
    			}
    			w2.write(c, 0, len);
    		}
    		}catch(IOException e) {
    			e.printStackTrace();
    		}finally {
    			//4.关闭流资源
    			try {
    				if(r!=null) {
    					r.close();
    				}
    				if(w2!=null) {
    					w2.close();
    				}
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}

  • 注意点:
    • 1.因为涉及到流资源的关闭操作,所以出现异常的话,需要使用try-catch-finally的方式来处理异常
    • 2.对于输入流来讲,要求File类的对象对应的物理磁盘上的文件必须存在。否则,会报FileNotFoundException异常。对于输出流来讲,File类的对象对应的物理磁盘上的文件可以不存在。
      • 如果此文件不存在,则在输出的过程中,会自动创建此文件,并写出数据到此文件中。
      • 如果此文件存在,使用
        • FileWriter(File file)或 FileWriter(File file,false):输出数据过程中,会新建同名的文件对现有的文件进行覆盖。
        • FileWriter(File file,true):输出数据过程中,会在现有的文件的末尾追加写出内容。
  • 常用方法说明:
    • public int read(): 从输入流读取一个字符。 虽然读取了一个字符,但是会自动提升为int类型。返回该字符的Unicode编码值。如果已经到达流末尾了,则返回-1。
    • public int read(char[] cbuf): 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中 。每次最多读取cbuf.length个字符。返回实际读取的字符个数。如果已经到达流末尾,没有数据可读,则返回-1。
    • public int read(char[] cbuf,int off,int len):从输入流中读取一些字符,并将它们存储到字符数组 cbuf中,从cbuf[off]开始的位置存储。每次最多读取len个字符。返回实际读取的字符个数。如果已经到达流末尾,没有数据可读,则返回-1。
    • public void close():关闭此流并释放与此流相关联的任何系统资源。
    • public void write(int c) :写出单个字符。
    • public void write(char[] cbuf):写出字符数组。
    • public void write(char[] cbuf, int off, int len):写出字符数组的某一部分。off:数组的开始索引;len:写出的字符个数。
    • public void write(String str):写出字符串。
    • public void write(String str, int off, int len) :写出字符串的某一部分。off:字符串的开始索引;len:写出的字符个数。
    • public void flush():刷新该流的缓冲。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值