java中的 FileWriter类 和 FileReader类的一些基本用法

FileWriter学习
FileWriter 文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。文件是否可用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个FileOutputStream(或其他文件写入对象)打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。

FileOutputStream 用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使用 FileWriter。

共有五个构造方法
FileWriter(File file) 根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(File file, boolean append) 根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。
FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。
FileWriter(FileDescriptor fd) 构造与某个文件描述符相关联的 FileWriter 对象。
其中方法可以分为三组,入参带File的为一组,入参带String 的为一组,这两组方法基本相似。

带File 的构造方法是直接传入文件来构造FileWriter对象,而带String 的构造方法,则必须先通过new File(String path) 来构造File 文件,再来构造FileWriter对象。
再看 File file 入参的两个方法
FileWriter(File file) 和 FileWriter(File file, boolean append) 的区别在于后面多了一个boolean append 参数
append 如果为 true,则将字节写入文件末尾处,而不是写入文件开始处
append 相当于指定了写入的方式,是覆盖写还是追加写

append 为true时,追加写,相当于Linux 里面的 >> 操作符;
在这里插入图片描述

package cn.itcast.demo3;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Java_2 {
    public static void main(String args[]) {
        File f1=new File("D://a.txt");
        //*********Found**********
        File f2=new File("D://b.txt");
        try {
            //*********Found**********
            FileReader fr=new FileReader(f2);
            FileWriter fw=new FileWriter(f1,true);
            int b;
            //*********Found**********
            while(( b=fr.read() ) != -1 )  fw.write(b);
            fr.close();
            fw.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
        System.out.println("has done!");
        //*********Found**********
        if(f2.delete()) System.out.print("SUCCESS!");
    }
}

在这里插入图片描述
在这里插入图片描述
append 为false时,覆盖写,相当于Linux 里面的 > 操作符。
在这里插入图片描述
在这里插入图片描述

1、FileWriter类(字符输出流类)

在这里插入图片描述

package cn.itcast.demo3;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class Java_2 {
    public static void main(String args[]) throws IOException {
    	/** 
         * 创建一个可以往文件中写入字符数据的字符流输出流对象 
         * 创建时必须明确文件的目的地 
         * 如果文件不存在,这回自动创建。如果文件存在,则会覆盖。 
         * 当路径错误时会抛异常 
         *  
         * 当在创建时加入true参数,实现对文件的续写。 
         * 当在创建时加入false参数,实现对文件的覆盖。 
         */  
        File f1=new File("D://a.txt");
        FileWriter fw = new FileWriter(f1, true);
        /** 
         * 调用该对象的write方法,向文件写入字符。 
         *  
         * 其实写入到了临时存储缓冲区中 
         */  
         fw.write("haha");
         //进行刷新,将字符写到目的地中。
         fw.flush(); 
         //关闭流,关闭资源。在关闭前会调用flush方法 刷新缓冲区。关闭后在写的话,会抛IOException
         fw.close(); 
        
    }
}

在这里插入图片描述

关于FileWriter的的异常处理。

在这里插入图片描述

package cn.itcast.demo3;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class Java_2 {
    public static void main(String args[]){
    	/** 
         * 创建一个可以往文件中写入字符数据的字符流输出流对象 
         * 创建时必须明确文件的目的地 
         * 如果文件不存在,这回自动创建。如果文件存在,则会覆盖。 
         * 当路径错误时会抛异常 
         *  
         * 当在创建时加入true参数,实现对文件的续写。 
         * 当在创建时加入false参数,实现对文件的覆盖。 
         */  
        File f1=new File("D://a.txt");
        FileWriter fw = null;
		try {
			fw = new FileWriter(f1, false);
			fw.write("hello" + "world!"); 
		} catch (IOException e) {
			
			e.printStackTrace();
		}finally {
            if (fw != null){  
                try {  
                	fw.flush(); 
                    fw.close();  
                } catch (IOException e) {  
                    throw new RuntimeException("关闭失败!");  
                }  
            }
		}
        
    }
}

在这里插入图片描述

2、FileReader类

示例代码一,文件读取的第一种方式,示例代码二,文件读取的第二种方式,第二种是常用的,必须会。

package cn.itcast.demo3;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Java_2 {
    public static void main(String args[]){
    	/*
    	 * 对文件的读取一共有两种方式,先介绍第一种读取方式
    	 * 步骤:
    	 * 1.创建文件读取流对象,和指定名称的文件相关联,如果不存在指定文件的话,发生FileNotFoundException。
    	 * 2.调用read方法,由于read一次只读一个字符,所以要用while循环。
    	 * 3.关闭资源块。
         */  
        File f1=new File("D://a.txt");
        FileReader fr = null;
		try {
			fr = new FileReader(f1);
			int ch = 0;
			//记住即可,read方法如果没有可读取的了,则返回-1
			//所以就是一直读取,并将读取的内容存入ch,一直到结尾
			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) {  
                    throw new RuntimeException("读取失败!");  
                }  
            }
		}
        
    }
}

在这里插入图片描述

package cn.itcast.demo3;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

public class Java_2 {
    public static void main(String args[]){
		/*
		 * 文件读取的第二种方式:通过字符数组进行读取
		 * 步骤和第一种基本相似,但其中就是多创建一个字符数组
         */  
        File f1=new File("D://a.txt");
        FileReader fr = null;
		try {
			fr = new FileReader(f1);
			char[] buf=new char[1024];
			//read(char [])返回读到的字符个数
			int num=0;
			//读取文件并把它存入buf中,用num返回读到字符的个数,一直读到结尾
			while((num=fr.read(buf)) != -1){
				//new String(字符串,开始位置,结尾位置)
				//字符数组里仍有空白没有读入的位置,所以不要了
				System.out.print((new String(buf,0,num)));
			}
		} catch (IOException e) {
			
			e.printStackTrace();
		}finally {
            if (fr != null){  
                try {  
                	fr.close();  
                } catch (IOException e) {  
                    throw new RuntimeException("读取失败!");  
                }  
            }
		}
        
    }
}

在这里插入图片描述
public String(byte[] bytes,int offset,int length)

  • 5
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
/** * 一、BufferedReader public class BufferedReader extends Reader * 从字符输入流读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值足够大。 * 通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader包装所有其 read() * 操作可能开销很高的 Reader(如 FileReader和 InputStreamReader)。 * BufferedReader流能够读取文本行,通过向BufferedReader传递一个Reader对象 * ,来创建一个BufferedReader对象,之所以这样做是因为FileReader没有提供读取文本行的功能. * * 二、InputStreamReader * * InputStreamReader 将字节流转换为字符流。是字节流通向字符流的桥梁。如果不指定字符集编码,该解码过程将使用平台默认的字符编码,如:GBK。 * * 构造方法: * * InputStreamReader isr = new InputStreamReader(InputStream * in);//构造一个默认编码集的InputStreamReader * * InputStreamReader isr = new InputStreamReader(InputStream in,String * charsetName);//构造一个指定编码集的InputStreamReader。 * * 参数 in对象通过 InputStream in = System.in;获得。//读取键盘上的数据。 * * 或者 InputStream in = new FileInputStream(String fileName);//读取文件的数据。可以看出 * FileInputStream 为InputStream的子。 * * 主要方法:int read();//读取单个字符。 int read(char []cbuf);//将读取到的字符存到数组。返回读取的字符数。 * * 三、FileWriter(少量文字) 和 BufferedWriter(大量文字)实现简单文件写操作 * @author hulk */

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值