Java读写文本文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sha18751330807/article/details/83513634

Java入门——读写文本文件

文本文件的读写在项目中会经常涉及,需要我们熟练掌握。

一、使用FileWriter写文件

【功能】FileWriter类专门用来写字符到文本文件中。

【构造方法】

  1. public FileWriter(String fileName):此构造方法的参数是文件名。文件名可以是相对路径,也可以绝对路径。此构造方法构造的对象,往文件写数据时,会擦除文件内原始内容,从头开始写数据。

  2. public FileWriter(String fileName, boo

  3. lean append):此构造方法要求两个参数,第一个单数fileName表示文件名,第二个参数append为true表示所写的新字符追加到文件原始内容之后,为fasle表示擦除文件的原始内容,从新开始写数据。

  4. FileWriter(File file):根据给定的 File 对象构造一个 FileWriter 对象。

  5. FileWriter(File file, boolean append):根据给定的 File 对象构造一个 FileWriter 对象。

  6. FileWriter(FileDescriptor fd):构造与某个文件描述符相关联的 FileWriter 对象。

【注意】

  1. FileWriter类只能用来写字符流到文件中,如果要写原始字节到文件,需要使用FileOutputStream类。
  2. FileWriter类将字符串按照默认的字符编码格式进行编码写到文件,缓冲区也是默认大小。如果要指定编码方式和缓冲区大小,需要使用FileOutputStream类。

【实例】:

// FileWriter类本身没有换行的方法,需要通过转义符换行
public static void writeTxt1(){
    // 构造对象时,append参数指示新字符是否添加到原内容后,该参数默认为false
    try(FileWriter fw = new FileWriter("other\\out1.txt", true)){
        fw.write("直接使用FileWriter写字符流到文件中\r\n");
        // fw.write("hhhh");
        // fw.write(System.getProperty("line.separator"));
        fw.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

【补充】不同系统的用来表示换行的转义字符不同,例如windows为’\r\n’,Unix为’\n’,mac为’\r’,因此,我们一般使用System.getProperty("line.separator")来获得当前系统的换行符。

二、使用BufferWriter类写文本文件

【功能】
将文本写入输出流,缓冲各个字符,从而提供单个字符、字符数组和字符串的高效写入。
【主要接口】

void write(char ch);//写入单个字符。
void write(char []cbuf,int off,int len)//写入字符数据的某一部分。
void write(String s,int off,int len)//写入字符串的某一部分。
void newLine()//写入一个行分隔符。
void flush();//刷新该流中的缓冲。将缓冲数据写到目的文件中去。
void close();//关闭此流,再关闭前会先刷新他。

【构造方法】

  1. public BufferedWriter(Writer out):创建一个默认缓冲区大小的字符输出流对象。参数out是一个输出流对象,如FileWriter对象。
  2. public BufferedWriter(Writer out, int sz) :创建一个指定缓冲区大小的字符输出流对象。参数out是一个输出流对象,如FileWriter对象。参数sz表示缓冲区大小,正整数。

【实例】

public static void writeFile(){
    try {
        File writeName = new File(".\\other\\out.txt");
        writeName.createNewFile();
        try (FileWriter writer = new FileWriter(writeName, true);
              BufferedWriter out = new BufferedWriter(writer)){
            out.write("写入文件1"); 
            out.newLine();   // 换行
            out.write("写入文件2");
            out.newLine();
            out.flush();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

三、使用FileReader类按字符读取文本

【功能】按字节读取文件

【主要接口】

int read();   // 读取一个字符并返回其对应的ASCII值
int read(char cbuf[], int offset, int length);   // 读取多个字符到指定的数组中,可指定偏移量和读取长度

【实例】

public static void readTxt1(){
    try (FileReader fr = new FileReader("other\\out1.txt")){
        int ch = 0;
        while ((ch = fr.read()) != -1){    // 单字符读入,也可以读入多个字符并存到符数组中
            System.out.println((char)ch);
        }
    }catch (IOException e){
        e.printStackTrace();
    }
}

四、使用BufferedReader读取文本

【功能】从字符流中读取文本,并且缓存字符串以提供高效的按字符,数组,按行读取的方式。
【构造方法】

  1. BufferedReader(Reader in, int sz):in是Reader实例化对象,sz为缓冲区大小;
  2. BufferedReader(Reader in):采用默认缓冲区大小,一般足够;
    【主要接口】
int read();  // 读取一个字符
int read1(char[] cbuf, int off, int len);   // 读取字符到字符数组中,指定偏移和数组长度
String readLine();   // 读取一行,可选择跳过换行符
long skip(long n);   // 跳过n个字符

【实例】

public static void readFile(){
    String pathName = "other\\test.txt";
//      Java7的try-with-resources可以优雅关闭文件,异常时自动关闭文件;
    try(FileReader reader = new FileReader(pathName);
        BufferedReader br = new BufferedReader(reader)){
        String line;
//           按行读取数据
        while ((line = br.readLine()) != null){
            System.out.println(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

【补充】推荐使用JDK7新特性 try-with-resources语法来自动关闭外部资源,不用在finally中手动关闭资源。

参考博客https://www.cnblogs.com/bayes/p/5478862.html

猜你喜欢

转载自blog.csdn.net/sha18751330807/article/details/83513634