Java读写文本文件

本文详细介绍了如何使用Java的字节流(FileInputStream和FileOutputStream)以及字符流(BufferedReader和FileReader,BufferedWriter和FileWriter)进行文本文件的读写操作。内容包括读取、写入的具体步骤,以及使用注意点,如默认覆盖文件内容、追加写入等。

使用字节流读写文本文件

  1. 使用字节流类FileInputStream读文本文件
  • FileInputStream 称为文件输入流,它是字节输入流 InputStream 抽象类的一个子类。
  • 作用是将文件中的数据输入到内存中,读取文本中的数据
  • 具体操作步骤如下
//导入相关的类
import java.io.IOException;
import java.io.InputStream;
import java.io.FileInputStream;
//构造一个文件输入流对象
InputStream fileObject=new FileInputStream("text.txt");
//利用文件输入流类的方法读取文本文件的数据
fileObject.available();//可读取的字节数
fileObject.read();//读取文件的数据
//关闭文件输入流对象
fileObject.close();
  • 使用FileInputStream读取文本文件数据示例
import java.io.IOException;
import java.io.InputStream;
import java.io.FileInputStream;


public class FileInputStreamTest {
    public static void main(String[] args){
        FileInputStream fis = null;
        try{
            fis = new FileInputStream("d:\\tttest\\text.txt");
            int data;
            System.out.println("可读取的字节数:"+fis.available());
            System.out.print("文件的内容为:");
            while((data=fis.read())!=-1){
                System.out.print((char)data+" ");  
                //read()方法返回的是整数,如果读取的是字符串,需要强制类型转换
            }
        }catch (IOException ioe){
            System.out.println("出现错误");
            ioe.getStackTrace();
        }
        try{
            fis.close();  //当流为空时不可关闭流,会发出空指针异常
        }catch (IOException ioe){
            ioe.getStackTrace();
        }
}
  1. 使用字节流FileOutputStream写文本文件
  • FileOutputStream 称为文件输出流,它是字节输出流 OutputStream 抽象类的子类
  • 作用是把内存中的数据输出到文件中,把内存中的数据写入到文本文件中
  • 具体实现步骤如下
//引入相关的类
import java.io.IOException;
import java.io.OutputStream;
import java.io.FileOutputStream;

public class FileOutputStreamTest {
    public static void main(String[] args){
        OutputStream fos=null;
        try{
            //构造一个文件输出流对象
            fos = new FileOutputStream("d:\\tttest\\FileOutputStreamTest.txt");
            //此时的文件输出流对象fos就和目标源数据源(FileOutputStreamTest.txt文件)关联起来
            //利用文件输出流的方法把数据写入到文本中
            String str="今天也有好好学习的。";
            byte[] words=str.getBytes();
            //利用write方法将数据写入到文件中去
            fos.write(words,0,words.length);
        }catch (IOException ioe){
            ioe.getStackTrace();
        }
        try{
            //关闭文件输出流
            fos.close();
        }catch (IOException ioe){
            ioe.getStackTrace();
        }
    }
}

默认情况下,向文件写数据时将覆盖文件中原有的内容
FileOutputStream fos=new FileOutputStream("d:\\tttest\\FileOutputStreamTest.txt",true);
第二个参数true,表示在文件末尾添加数据
并且如果FileOutputStreamTest.txt文件不存在,程序运行后,将首先创建此文件然后写入数据

  • 使用注意:
    • 在创建FileOutputStream实例时,如果相应的文件不存在,就会自动创建一个空的文件
    • 如过参数file或name表示的文件路径存在,但是代表一个文件目录,则此时会抛出FileNotFoundException类型的异常
    • 默认情况下,像文件写数据时将覆盖文件中原有的内容

使用字符流读写文本文件

  1. 使用字符流类 BufferedReaderFileReader 读文本文件
  • BufferedReader 和 FileReader 两个类都是 Reader 抽象类的子类
  • 可以通过字符流的方式读取文件
  • 使用缓冲区,提高了读文本文件的效率
  • 具体步骤如下
//引入相关的类
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

public class ReaderTest {
    public static void main(String[] args){
        //构造一个BufferedReader对象
        FileReader fr=null;
        BufferedReader br=null;
        try{
            fr=new FileReader("d:\\tttest\\filereadertest.txt");
            br=new BufferedReader(fr);
            //利用BufferedReader类的方法读取文本文件的数据
            br.readLine();  //读取一行数据,返回字符串
        }catch (IOException ioe){
            ioe.getStackTrace();
        }try{
            //关闭相关的流对象
            br.close();
            fr.close();
        }catch (IOException ioe){
            ioe.getStackTrace();
        }
    }
}
  • 使用BufferedReader类和FileReader类读取文本数据示例
//引入相关的类
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

public class ReaderTest {
    public static void main(String[] args){
        //构造一个BufferedReader对象
        FileReader fr=null;
        BufferedReader br=null;
        try{
            fr=new FileReader("d:\\tttest\\filereadertest.txt");
            //将文件写入缓冲区,BufferedReader即为缓冲区
            br=new BufferedReader(fr);
            //利用BufferedReader类的方法读取文本文件的数据
            String line=br.readLine();  
            //读取一行数据,返回字符串
            while(line!=null){
            	//如果行不为空,打印行内容
                System.out.println(line);
                line=br.readLine();   
            }
        }catch (IOException ioe){
            ioe.getStackTrace();
        }try{
            //关闭相关的流对象
            br.close();
            fr.close();
        }catch (IOException ioe){
            System.out.println("文件不存在!");
            ioe.getStackTrace();
        }
    }
}
  1. 使用字符流类 BufferedWriterFileWriter 写文本文件
  • BufferedWriter 和 FileWriter 都是字符输出流 Writer抽象类的子类
  • 可以通过字符流的方式,通过缓冲区把数据写进文本文件中
  • 提高了写文本文件的效率
  • 具体步骤如下
//引入相关的类
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;

public class WriterTest {
    public static void main(String[] args){
        //构造一个BufferedWriter对象
        FileWriter fw=null;
        BufferedWriter bw=null;
        try{
            fw=new FileWriter("d:\\tttest\\FileWriterTest.txt");
            bw=new BufferedWriter(fw);
            //利用BufferedWriter类的方法写文本文件
            bw.write("test,test,are you ok?");

        }catch (IOException ioe){
            ioe.getStackTrace();
        }
        try{
            //相关流对象的清空和关闭
            bw.flush();
            bw.close();
            fw.close();
        }catch (IOException ioe){
            ioe.getStackTrace();
        }
    }
}
  • 使用BufferedWriter 和 FileWriter 对象向文本文件中写数据,并将写入文件的数据读取出来显示在屏幕上
//引入相关的类
import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.FileReader;
import java.io.BufferedReader;

public class WriterTest {
    public static void main(String[] args){
        //构造一个BufferedWriter对象
        FileWriter fw=null;
        BufferedWriter bw=null;
        try{
            fw=new FileWriter("d:\\tttest\\FileWriterTest.txt");
            bw=new BufferedWriter(fw);
            //利用BufferedWriter类的方法写文本文件
            bw.write("hello!");
            bw.newLine();
            bw.write("thank you!");
            bw.newLine();
            bw.write("are you ok?");
            bw.newLine();

        }catch (IOException ioe){
            ioe.getStackTrace();
        }
        try{
            //相关流对象的清空和关闭
            bw.flush();
            bw.close();
            fw.close();
        }catch (IOException ioe){
            ioe.getStackTrace();
        }
//将文件中的数据读取出来
        FileReader fr=null;
        BufferedReader br=null;
        try{
            fr=new FileReader("d:\\tttest\\FileWriterTest.txt");
            br=new BufferedReader(fr);
            String line=br.readLine();
            while(line!=null){
                System.out.println(line);
                line=br.readLine();
            }
        }catch(IOException ioe){
            ioe.getStackTrace();
        }
        try{
            br.close();
            fr.close();
        }catch (IOException ioe){
            ioe.getStackTrace();
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值