如何在Java中对文件进行读写操作

java的IO

Java程序允许通过流的方式与输入输出设备进行数据传输。Java中的流都在java.io包中,称为IO(输入输出)流。IO流按照操作数据的不同,可以分为字节流和字符流,按照数据传输方向的不同,又可以分为输入流和输出流,程序从输入流中读取数据,向输出流中写入数据,在IO包中,字节流的输入输出分别用java.InputStream和java.io.OutputStream表示,字符流的输入输出分别用java.io.Reader和java.io.Writer表示。

字节流

在计算机中,无论是文本,图片,音频还是视频,所有的文件都是以二进制的方式存在的,字节流是程序中最常用的流,根据数据的传输方向分为字节输入流和字节输出流,在JDK中,提供了两个抽象类InputStream和OutputStream,他们是字节流的顶级父类,所有的字节输入流都继承OutputStream.

InputStream的常用方法

 int read()//从输入流中读取一个八位的字节,并把它转换为0~255之间的整数,并返回这一整数
 int read(byte[]b)//从输入流读取若干个字节,把它们保存到参数b指定的字节数组中,返回的整数表四读取字节的数目
 int read(byte[]b,int off,int len)//从输入流读取若干字节,把它们保存到参数b指定的字节数组中,off指定字节数组开始保存数据的起始下标,len表示读取的字节数目
 void close()//关闭此输入流并释放与该流关联的所有系统资源 

OutputStream的常用方法

 void write(int b)//向输出流写入一个字节
 void write(byte[]b)//把参数b指定的字节数组的所有字节写到输出流
 void write(byte[]b,int off,int len)//将指定的byte数组中从偏移量off开始的len个字节写入输出流
 void flush()//刷新此输出流并强制手写所有的缓冲的输出字节
 void close()//关闭此输出流并释放与此流相关的所有系统资源

flush()方法用来将当前输出流缓冲区(通常是字节数组中)的数据强制写入目标设备,此过程称为刷新。InputStream和OutputStream这两个类虽然提供了一些读写数据有关的方法,但是这两个类都是抽象类,不能被实例化。

字节流读写文件

由于计算机中的数据基本都保存在硬盘的文件中,在操作文件时,从文件中读取数据并将数据写入文件,FileInputStream和File Output Stream是进行读写操作的两个类。由于从文件中读取数据是重复的操作,因此需要通过循环语句来实现数据的持续读取。

 package IO;
 import java.io.FileInputStream;
 public class Li01 {
     public static void main(String[] args) throws Exception{
         FileInputStream in=new FileInputStream("test.txt");
         int b=0;
         while(true){
             b=in.read();
             if(b==-1){
                 break;
             }
             System.out.print(b+" ");
         }
         in.close();
     }
 }

演示结果

 

 

之所以输出数字是因为硬盘上面的文件都是以字节的形式存在的,在进行读取文件数据时,必须保证文件在相应目录存在并且是可读的。

如何将数据写入到文件中

 package IO;
 import java.io.FileOutputStream;
 import java.io.OutputStream;
 import java.nio.charset.StandardCharsets;
 public class Li02 {
     public static void main(String[] args) throws Exception{
         OutputStream out=new FileOutputStream("example1.txt");
         String str="好好学习,天天向上!";
         byte[]b=str.getBytes(StandardCharsets.UTF_8);
         for(int i=0;i<b.length;i++){
             out.write(b[i]);
         }
         out.close();
     }
 }

 

 

通过FileOutputStream写数据时,自动创建了文件example1.txt,并将数据写入文件,如果向已存在文件中写入内容,首先该文件的内容会被清空,然后再写入新的数据,如果想要在已存在的文件后追加内容,可以在文件名后面加个boolean值并设置为true。

 
package IO;
 ​
 import java.io.FileOutputStream;
 import java.io.OutputStream;
 import java.nio.charset.StandardCharsets;
 ​
 public class Li02 {
     public static void main(String[] args) throws Exception{
         OutputStream out=new FileOutputStream("example1.txt",true);
         String str="好好学习,天天向上!";
         byte[]b=str.getBytes(StandardCharsets.UTF_8);
         for(int i=0;i<b.length;i++){
             out.write(b[i]);
         }
         out.close();
     }
 } 

 

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
/** * 一、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 */

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LNORA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值