java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java文件输入输出及其常用类

Java文件输入输出及其常用类使用及说明

作者:陵易居士

还在纠结Java文件操作怎么学?本文详细介绍了FileInputStream、FileOutputStream等字节流和字符流的用法,包括读取、写入、追加模式,并对比了字符流与字节流在处理文本和二进制文件时的区别,帮你轻松掌握Java文件读写核心

对于一个应用程序来说什么是最重要的?数据!数据一般存放在文件、数据库中,今天介绍java中关于文件操作的一些常用类,学好文件操作是很有必要的。

字节输入输出流

FileInputStream

查看源码,可以看到它是继承自InputStream类

public
class FileInputStream extends InputStream

它用于从文件中读取数据,以字节为单位

初始化创建输入流对象

1.传入文件路径字符串

    public FileInputStream(String name) throws FileNotFoundException {
        this(name != null ? new File(name) : null);
    }

查看源码我们可以看到,我们传入路径字符串后它会使用这个字符串生成文件对象

代码示例

FileInputStream is=new FileInputStream("D:\\test01.txt");

2.传入文件对象

    public FileInputStream(File file) 

 我们也可以传入一个文件对象,他就会绑定到这个文件对象指定的文件

       File file1=new File("D:\\test01.txt");

       FileInputStream is=new FileInputStream(file1);

读取数据

1.  public int read()

从文件中读取一个字节的数据,返回类型为int,如果文件此时为空则返回-1

        File file1=new File("D:\\test01.txt");

        FileInputStream is=new FileInputStream(file1);
        
        
        int x=0;
        while(x!=-1){
            x=is.read();
            System.out.println((char)x);
        }

例如用上面这种操作可以循环读取,直到读取完毕整个数组

2.public int read(byte b[])

这个方法读取数组b长度大小的字节,并且返回成功读取字节的个数,如果已经到了文件末尾则返回-1

        File file1=new File("D:\\test01.txt");

        FileInputStream is=new FileInputStream(file1);
        

        byte []chars=new byte[6];
        int len=0;
        while((len=is.read(chars))!=-1){

            System.out.println("读到长度为"+len+"的字符串:"+new String(chars));
        }

例如上面这个就是每次在文件中读取6个字节的数据,直到读到文件末尾

3.public int read(byte b[], int off, int len)

从文件中读取len个长度的字节数据赋值到数组b中以off为起点的敌方

关闭输入流

调用输入流的close方法,关闭对文件资源的占用

        File file1=new File("D:\\test01.txt");

        FileInputStream is=new FileInputStream(file1);
        

        byte []chars=new byte[6];
        int len=0;
        while((len=is.read(chars))!=-1){

            System.out.println("读到长度为"+len+"的字符串:"+new String(chars));
        }
        is.close();

FileOutputStream

初始化创建输出流对象

1.传入文件路径字符串

和输入流的初始化一样,这里也可以直接把要写入的文件的路径写成字符串直接赋值给构造器

public FileOutputStream(String name)

2.在1的基础上判断是否重写文件数据

和第一个方法类似,这个方法要求传入一个布尔类型的值,为true则表示新写入的数据自动加到末尾,如果为false则默认重写文件内容,即之前的数据会清空,只保留最新写入的

public FileOutputStream(String name, boolean append)

//为真则表示新写入的数据加到末尾
//为假则只保留新加入的数据

3.传入文件对象

这个也和输入流类似,传入一个文件对象即可绑定相应的文件

public FileOutputStream(File file) 

写入数据

1.public void write(int b)

将int型的数据写入到文件中去,注意这里只能写入单个数字,因为一次只能写入一个字节

2. public void write(byte b[])

将数组b中的数据全部写入到文件中去,我们可以利用这个方法将字符串写进文件中去,因为String类有个getBytes()方法,可以获取字符串的字节字符串,用法如下所示

         File fileout=new File("D:\\aaa.txt");

         FileOutputStream outputStream=new FileOutputStream(fileout);

         String s=new String("这段话是写进记事本中的");

         outputStream.write(s.getBytes(),0,2);//可以控制写入字符串的大小

3.public void write(byte b[], int off, int len)

将数组b中下标off开始的len个字节长度的数据写入到文件中去

        String filename=new String("D:\\ceshifile\\hm.png");
        String filename1=new String("D:\\ceshifile\\hm01.png");
        FileInputStream inputStream=new FileInputStream(filename);

        FileOutputStream outputStream=new FileOutputStream(filename1);

        byte[] ss=new byte[1024];
        int len=0;
        while((len=inputStream.read(ss))!=-1){//每次从文件中读取1024个长度的数据,返回读取个数
                                              //如果读到了文件末尾返回-1

            outputStream.write(ss,0,len);//利用len获取的有效字节长度
                                         //将数组中的数据写入到新文件中
        }

        inputStream.close();
        outputStream.close();//关闭输入输出流

上面是从一个文件读取数据同时向另外一个文件写数据的代码,注意最后输入输出流使用完毕要调用close方法释放占用的资源。

字符输入输出流

FileReader

从文件中读取数据,用法基本和FileInputStream类似

FileWriter

向文件中写入数据,用法基本和FileOutputStream类似,这里不再赘述

字符流与字节流的区别

一、处理的数据单元不同

字符输出流(Writer 及其子类):

字节输入输出流(InputStream 和 OutputStream 及其子类):

二、编码方式的考虑

字符输出流:

字节输入输出流:

三、使用场景不同

字符输出流:

字节输入输出流:

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文