栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java的File类和IO流

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java的File类和IO流

一、File类的使用

1.什么是File类

File类就是当前系统中,文件或文件夹的抽象表示

2.File的绝对路径和相对路径

绝对路径是从盘符开始

相对路径是不带盘符,默认到当前工程下的目录寻找文件

File file1 = new File("D:\demo\a.txt");
File file=new File(FileTest.class.getResource("/application.yml").getFile());

3.File的常用方法

                                  方法名称                                  说明
    public boolean isDirectory()测试此抽象路径名表示的File是否为文件夹

    public boolean isFile()

测试此抽象路径名表示的File是否为文件

    public boolean exists()

测试此抽象路径名表示的File是否存在

   public boolean createNewFile()

测试此抽象路径名表示的File是否存在,不存在创建新文件

    public boolean delete​()

删除此抽象路径名表示的文件或目录

    public String  getName()

返回由此抽象路径名表示的文件或目录的名称
    public boolean mkdir()只能创建一级文件夹
    public String[] list()返回由此抽象路径名表示的文件或目录的名称
    public File[] listFiles()遍历当前文件夹下的一级文件对象
二.IO流的分类和使用

1.什么是IO流

I表示intput,是数据从硬盘文件读入到内存的过程,称之输入,负责读。

O表示output,是内存程序的数据从内存到写出到硬盘文件的过程,称之输出,负责写

2.IO流的分类

字节流和字符流的区别:

字节流的操作不会经过缓冲区而是直接操作文件,字符流的操作会经过缓冲区然后通过缓冲区再操作文件。

 字节流以字节为单位输入输出数据,字节流按照8位传输,字符流以字符为单位输入输出数据,字符流按照16位传输。

Java中一切都是字节流,没有字符流。字符流是有Java虚拟机得到的,音频、视频等媒体文件用字节流比较好,涉及到字符的话使用字符流比较好。

(抽象基类)字节流字符流
输入流InputStreamReader
输出流OutputStreamWriter

3.字节文件流

FileOutputStream不使用任何缓冲区,因此flush方法为空。是否调用它不会更改代码的结果。

        InputStream inputStream= null;
        OutputStream outputStream= null;
        try {
            inputStream = new FileInputStream(new File("C:\Users\lxy\Desktop\2.txt"));
            outputStream = new FileOutputStream("C:\Users\lxy\Desktop\1.txt");
            byte[] buffer=new byte[1024];
            int i=0;
            while((i=inputStream.read(buffer))!=-1){
                outputStream.write(buffer,0,i);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            inputStream.close();        
            outputStream.close();
        }

4.字节缓冲流

基本思想就是减少磁盘的访问次数,一次性的先从磁盘中获取一部分数据到内存中。程序后续如果能从缓存中获取数据,就不会真正访问磁盘,以提高读取效率。字节缓冲流BufferedInputStream的缓冲区大小为8192。BufferedOutputStream的close()方法调用了flush()方法,也就是说,在关闭流之前会执行最后一次flush()之后不能在写入数据。

        InputStream inputStream= null;
        OutputStream outputStream= null;
        BufferedInputStream bufferedInputStream=null;
        BufferedOutputStream bufferedOutputStream=null;
        try {
            inputStream = new FileInputStream(new File("C:\Users\lxy\Desktop\1.txt"));
            outputStream = new FileOutputStream("C:\Users\lxy\Desktop\2.txt");
            bufferedInputStream=new BufferedInputStream(inputStream);
            bufferedOutputStream=new BufferedOutputStream(outputStream);
            byte[] buffer=new byte[1024];
            int i=0;
            while((i=bufferedInputStream.read(buffer))!=-1){
                bufferedOutputStream.write(buffer,0,i);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            bufferedInputStream.close();
            bufferedOutputStream.close();
       }

5.字节数据流

DataInputStream和DataOutputStream是一对可以直接读取基本类型数据的流,DataOutputStream写入的只有DataInputStream才能读出来,读取顺序要和写入顺序一样,且次数也要一样。DataOutputStream的close()方法调用了flush()方法,也就是说,在关闭流之前会执行最后一次flush()之后不能在写入数据。

        OutputStream outputStream= null;
        DataOutputStream dataOutputStream=null;
        try {
            outputStream = new FileOutputStream("C:\Users\lxy\Desktop\2.txt");
            dataOutputStream=new DataOutputStream(outputStream);
            int i=50;
            double b=3.24;
            float f=3.24f;
            dataOutputStream.writeInt(i);
            dataOutputStream.writeDouble(b);
            dataOutputStream.writeFloat(f);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            outputStream.close();
            dataOutputStream.close();
        }
        InputStream  inputStream=null;
        DataInputStream dataInputStream=null;
        try {
            inputStream = new FileInputStream("C:\Users\lxy\Desktop\2.txt");
            dataInputStream=new DataInputStream(inputStream);
            System.out.println(dataInputStream.readInt());
            System.out.println(dataInputStream.readDouble());
            System.out.println(dataInputStream.readFloat());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            inputStream.close();
            dataInputStream.close();
        }

6.字节数组流

ByteArrayOutputStream可以自定义数组大小,默认是32字节。

ByteArrayXXXputStream操作的是数组,不需要进行close()关闭。

ByteArrayXXXputStream和BufferedXXXputStream的区别:

ByteArrayXXXputStream内部的数组大小是固定的。针对不用缓冲区的一般输出流而言的,即减少读取到内存的次数,同时缓冲区大小固定,缓冲区满则清空,有效利用内存( 缓冲区满后,即时清空缓冲区,输出到输出流中,可以有效利用内存。BufferedXXXputStream内部的数组大小是可变的。缓冲区满后,继续扩大缓冲区的大小,最后得到一个保存所有内容的byte数组。较之BufferedOutputStream速度上存在优势,目的是不直接操作数据流。

        String s="ABCDEFG";
        ByteArrayInputStream inputStream=new ByteArrayInputStream(s.getBytes());
        ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
        byte[] buffer=new byte[1024];
        int ch=0;
        while ((ch=inputStream.read(buffer))!=-1){
            outputStream.write(buffer,0,ch);
        }
        System.out.println(outputStream.toString());

7.字符文件流

        FileReader fileReader= null;
        FileWriter fileWriter= null;
        try {
            fileReader = new FileReader("C:\Users\lxy\Desktop\1.txt");
            fileWriter = new FileWriter("C:\Users\lxy\Desktop\2.txt");
            int len;
            char[] chars=new char[5];
            while ((len=fileReader.read(chars))!=-1){
                fileWriter.write(chars,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            fileReader.close();
            fileWriter.close();
        }

8.字符缓冲流

        FileReader fileReader= null;
        FileWriter fileWriter= null;
        BufferedReader bufferedReader=null;
        BufferedWriter bufferedWriter=null;
        try {
            fileReader = new FileReader("C:\Users\lxy\Desktop\1.txt");
            fileWriter = new FileWriter("C:\Users\lxy\Desktop\2.txt");
            bufferedReader = new BufferedReader(fileReader);
            bufferedWriter = new BufferedWriter(fileWriter);
            int len;
            char[] chars=new char[6];
            while ((len=bufferedReader.read(chars))!=-1){
                bufferedWriter.write(chars,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            bufferedReader.close();
            bufferedWriter.close();
        }

9.读取文本中内容

        int len=0;
        StringBuffer str=new StringBuffer("");
        File file=new File("C:\Users\lxy\Desktop\1.txt");
        try {
            InputStreamReader isr= new FileReader(file);
            BufferedReader in= new BufferedReader(isr);
            String line=null;
            while( (line=in.readLine())!=null )
            {
                if(len != 0) // 处理换行符的问题
                {
                    str.append("rn"+line);
                }
                else
                {
                    str.append(line);
                }
                len++;
            }
            in.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(str.toString());

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/966707.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号