Java File类和IO流

这篇具有很好参考价值的文章主要介绍了Java File类和IO流。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1. File类

1.1 File对象创建

1.2 File判断和获取方法

1.3 创建和删除方法

1.4 遍历文件夹

2. 字符集

2.1 ASCII字符集

2.2 GBK字符集

2.3 Unicode字符集

2.4 UTF-8

2.5 字符集小结

2.6 编码和解码

3. IO流(字节流)

3.1 IO流概述

3.2 FileInputStream

3.3 FileOutputStream 

3.4 FileReader

3.5 FileWriter

3.6 缓冲流

3.7 转换流

3.8 打印流

3.9 其他流

3.10  IO资源释放

3.11 IO框架

3.12 总结


1. File类

1.1 File对象创建

Java File类和IO流,Java面试指南,java,后端

注意:

  • 路径中"\"要写成"\\", 路径中"/"可以直接用 
  • File对象可以指代一个不存在的文件路径
  • 路径中带盘符是绝对路径,不带盘符是相对路径

1.2 File判断和获取方法

Java File类和IO流,Java面试指南,java,后端

1.3 创建和删除方法

/**
 * 目标:掌握File创建和删除文件相关的方法。
 */
public class FileTest3 {
    public static void main(String[] args) throws Exception {
        // 1、public boolean createNewFile():创建一个新文件(文件内容为空),
            创建成功返回true,反之。
        File f1 = new File("D:/resource/itheima2.txt");
        System.out.println(f1.createNewFile());

        // 2、public boolean mkdir():用于创建文件夹,
            注意:只能创建一级文件夹
        File f2 = new File("D:/resource/aaa");
        System.out.println(f2.mkdir());

        // 3、public boolean mkdirs():用于创建文件夹,
            注意:可以创建多级文件夹
        File f3 = new File("D:/resource/bbb/ccc/ddd/eee/fff/ggg");
        System.out.println(f3.mkdirs());

        // 3、public boolean delete():删除文件,或者空文件,
        注意:不能删除非空文件夹。
        System.out.println(f1.delete());
        System.out.println(f2.delete());
        File f4 = new File("D:/resource");
        System.out.println(f4.delete());
    }
}

1.4 遍历文件夹

Java File类和IO流,Java面试指南,java,后端

  • 当主调是文件时,或者路径不存在时,返回null
  • 当主调是空文件夹时,返回一个长度为0的数组
  • 当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹路径放在File数组中,并把数组返回
  • 当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在FIle数组中,包含隐藏文件
  • 当主调是一个文件夹,但是没有权限访问时,返回null

2. 字符集

2.1 ASCII字符集

Java File类和IO流,Java面试指南,java,后端

2.2 GBK字符集

中国人为了在计算机中存储中文,也编了一个中国人用的字符集叫做GBK字符集,这里面包含2万多个汉字字符,GBK中一个汉字采用两个字节来存储,为了能够显示英文字母,GBK字符集也兼容了ASCII字符集,在GBK字符集中一个字母还是采用一个字节来存储。  

需要我们注意汉字和字母的编码特点:

  • 如果是存储字母,采用1个字节来存储,一共8位,其中第1位是0
  • 如果是存储汉字,采用2个字节来存储,一共16位,其中第1位是1

例如存储 我i你

Java File类和IO流,Java面试指南,java,后端

后续各个国家也有了自己的字符集,这就很混乱。

2.3 Unicode字符集

为了解决各个国家字符集互不兼容的问题,由国际化标准组织牵头,设计了一套全世界通用的字符集,叫做Unicode字符集。在Unicode字符集中包含了世界上所有国家的文字,一个字符采用4个字节存储。  

2.4 UTF-8

在Unicode字符集中,采用一个字符4个字节的编码方案,又造成另一个问题:如果是说英语的国家,他们只需要用到26大小写字母,加上一些标点符号就够了,本身一个字节就可以表示完,用4个字节就有点浪费。

于是又对Unicode字符集中的字符进行了重新编码,一共设计了三种编码方案。分别是UTF-32、UTF-16、UTF-8; 其中比较常用的编码方案是UTF-8 。

  • UTF-8是一种可变长的编码方案,共分为4个长度区
  • 英文字母、数字占1个字节,兼容(ASCII编码)
  • 汉字字符占3个字节
  • 极少数字符占4个字节

2.5 字符集小结

ASCII字符集:《美国信息交换标准代码》,包含英文字母、数字、标点符号、控制字符
	特点:1个字符占1个字节

GBK字符集:中国人自己的字符集,兼容ASCII字符集,还包含2万多个汉字
	特点:1个字母占用1个字节;1个汉字占用2个字节

Unicode字符集:包含世界上所有国家的文字,有三种编码方案,最常用的是UTF-8
    UTF-8编码方案:英文字母、数字占1个字节兼容(ASCII编码)、汉字字符占3个字节

2.6 编码和解码

就是起翻译作用,代码通过编码成二进制文件,电脑可以读懂。二进制文件解码成代码。

但是得用同一套字符集,不然会乱码。

/**
 * 目标:掌握如何使用Java代码完成对字符的编码和解码。
 */
public class Test {
    public static void main(String[] args) throws Exception {
        // 1、编码
        String data = "a我b";
        byte[] bytes = data.getBytes(); // 默认是按照平台字符集(UTF-8)进行编码的。
        System.out.println(Arrays.toString(bytes));

        // 按照指定字符集进行编码。
        byte[] bytes1 = data.getBytes("GBK");
        System.out.println(Arrays.toString(bytes1));

        // 2、解码
        String s1 = new String(bytes); // 按照平台默认编码(UTF-8)解码
        System.out.println(s1);

        String s2 = new String(bytes1, "GBK");
        System.out.println(s2);
    }
}

3. IO流(字节流)

3.1 IO流概述

File类只能操作文件,却不能操作文件中的内容。

IO流的作用就是对文件或网络中的数据进行读、写操作,输入流(读数据)和输出流(写数据)。

分为两大派系:字节流和字符流。

IO流的体系:

Java File类和IO流,Java面试指南,java,后端

3.2 FileInputStream

Java File类和IO流,Java面试指南,java,后端

读取文件全部字节,但一般不会这么干。

Java File类和IO流,Java面试指南,java,后端

Java File类和IO流,Java面试指南,java,后端

3.3 FileOutputStream 

没啥可说的,注意在new FilOutputStream的时候,第二个参数觉得是覆盖写还是追加写。默认false,覆盖。

一个主要方法:void write(byte/bytes)、void write(bytes,0,length)

3.4 FileReader

Java File类和IO流,Java面试指南,java,后端

3.5 FileWriter

Java File类和IO流,Java面试指南,java,后端

注意:FileWrite写完数据必须flush() 才能把数据保存到文件中。

3.6 缓冲流

缓冲流就是对原始流的包装,其实是一个东西。

Java File类和IO流,Java面试指南,java,后端

Java File类和IO流,Java面试指南,java,后端

BufferReader特有方法:String readLine(),读取一行数据,如果没有,返回null。

BuffreWriter特有方法: void newLine(),换行

Java File类和IO流,Java面试指南,java,后端

Java File类和IO流,Java面试指南,java,后端 

注意:并不是高级流性能就好。

3.7 转换流

用FileReader读数据时默认只能读取UTF-8编码的数据,不然会乱码。

就可以用 转换流InputStreamReaderOutputStreamWriter。

分析一波InputSteamReader,InputStream时字节流,Reader是字符流,什么意思?就是将字节流转换为字符流,并且可以自定义编码方式。

                // 1、得到文件的原始字节流(GBK的字节流形式)
                InputStream is = new FileInputStream("io-app2/src/itheima06.txt");
                // 2、把原始的字节输入流按照指定的字符集编码转换成字符输入流
                Reader isr = new InputStreamReader(is, "GBK");
                // 3、把字符输入流包装成缓冲字符输入流
                BufferedReader br = new BufferedReader(isr);

OutputStreamWriter用法一样。

3.8 打印流

Java File类和IO流,Java面试指南,java,后端

                

//              1、创建一个打印流管道
//                PrintStream ps =
//                        new PrintStream("io-app2/src/itheima08.txt", Charset.forName("GBK"));
//                PrintStream ps =
//                        new PrintStream("io-app2/src/itheima08.txt");
                PrintWriter ps =
                        new PrintWriter(new 
FileOutputStream("io-app2/src/itheima08.txt", true));

 ps.print(97);	//文件中显示的就是:97
 ps.write(97); //文件中显示a,发现和前面println方法的区别了吗?

 以前常用的System.out.println("xxx");Sysytem类里面有一个静态变量out,out就是一个打印流PrintStream,默认打印到控制台。

还可以更改打印位置。

PrintStream ps = new PrintStream("io-app2/src/itheima09.txt");
System.setOut(ps);
System.out.println("烈士暮年");	

就是打印到文件中。

3.9 其他流

此外还有数据量和系列化流等。

3.10  IO资源释放

流使用完一定要释放资源。

在JDK17之前释放流需要

try{
    //有可能产生异常的代码
}catch(异常类 e){
    //处理异常的代码
}finally{
    //释放资源的代码
    //finally里面的代码有一个特点,不管异常是否发生,finally里面的代码都会执行。
}

这样写出的代码多且乱。

JDK17之后这样写,会自动释放资源。

try(资源对象1; 资源对象2;){
    使用资源的代码
}catch(异常类 e){
    处理异常的代码
}

//注意:注意到没有,这里没有释放资源的代码。它会自动是否资源

3.11 IO框架

commons-io:由apache开源基金组织提供了一组有关IO流小框架,可以提高IO流的开发效率。

JAR包中工具类举例:

Java File类和IO流,Java面试指南,java,后端

3.12 总结

上面说了这么多类型的流, 现实中要用到的时候大多用BufferReader和BufferWriter,构造方法里面要有低级流。

要指定字符集时可以用转换流。文章来源地址https://www.toymoban.com/news/detail-697473.html

到了这里,关于Java File类和IO流的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java基础(十七)File类与IO流

    1.1 概述 File类及本章下的各种流,都定义在java.io包下。 一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹),与平台无关。(体会万事万物皆对象) File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本

    2024年02月02日
    浏览(38)
  • java基础入门-18-【IO(异常&File&综合案例)】

    异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。 在Java等面向对象的编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常的方式是中断处理。 异常指的并不是语法错误,语法错了,编译不通过

    2024年02月07日
    浏览(46)
  • 【JavaSE】Java基础语法(三十六):File & IO流

    java.io.File类是文件和目录路径名的抽象表示形式,主要用于文件和目录的创建、查找和删除等操作。 File:它是文件和目录路径名的抽象表示 文件和目录可以通过File封装成对象 File封装的对象仅仅是一个路径名。它可以是存在的,也可以是不存在的。 | 方法名 | 说明 | | —

    2024年02月07日
    浏览(43)
  • JAVA基础学习笔记-day15-File类与IO流

    博文主要是自己学习JAVA基础中的笔记,供自己以后复习使用,参考的主要教程是B站的 尚硅谷宋红康2023大数据教程 老骥伏枥,志在千里 --曹操《龟虽寿》 1.1 概述 File类及本章下的各种流,都定义在 java.io 包下。 一个File对象代表硬盘或网络中可能存在的一个文件或者文件目

    2024年01月21日
    浏览(39)
  • 7.0、Java_IO流 - File 类的基本使用

    File类的作用:         File 类是 Java 提供的针对磁盘中的 文件 或 目录  转换为对象的包装类;一个File 对象可以代表一个 文件 或者 目录 ,File 对象可以实现获取文件和目录属性等功能,可以实现对文件和目录的创建、删除等功能;         我的个人理解就是 File 类已

    2024年02月11日
    浏览(38)
  • java面试题 --- IO

    1. IO流的分类有哪些? 按照流向分为输入流和输出流; 按照实现功能分为节点流和处理流。节点就是从一个特定的地方读写数据,包括数组操作,管道操作和文件操作;处理流对已存在的流进行封装和处理,包括缓冲操作,打印操作和转化操作等; 按照处理数据的单位分为

    2024年02月10日
    浏览(43)
  • Java eight 解读流(Stream)、文件(File)、IO和异常处理的使用方法

    java.io 包几乎包含了所有操作输入、输出需要的类。所有这些流类代表了输入源和输出目标。 Java.io 包中的流支持很多种格式,比如:基本类型、对象、本地化字符集等等。 一个流可以理解为一个数据的序列。输入流表示从一个源读取数据,输出流表示向一个目标写数据。

    2024年02月11日
    浏览(47)
  • Unable to make field private final java.lang.String java.io.File.path accessible: module java.base

    问题描述: 使用Android Studio运行应用时报错: Unable to make field private final java.lang.String java.io.File.path accessible: module java.base does not \\\"opens java.io\\\" to unnamed module @7a4eb222  从报错信息可以看出跟Java模块化有关,先前都是用的JDK8 而模块化是JDK9引入的新功能 解决方法: 经过检查发现

    2024年02月14日
    浏览(51)
  • Unable to make field private final java.lang.String java.io.File.path accessible:moudle java.base

    你项目的gradle版本和as版本不匹配,也就是你遇到下面报错时候,采用系统的提示方法将gradle改成了7.2导致上面的报错。 关闭Android Studio,删除刚刚的项目目录。然后重新解压导入,遇到Java版本问题按照下面博客解决:Your build is currently configured to use Java 17.0.6 and Gradle 5.6.4. 学

    2024年02月03日
    浏览(57)
  • JAVA面试部分——后端-Redis

    6.1 为什么要使用Redis? Redis(Remote Dictionary Server)是一个开源的内存数据存储系统,它可以用作数据库、缓存和消息中间件。以下是一些使用Redis的主要优势: 快速读写操作: Redis是基于内存的存储系统,因此能够提供非常快速的读写操作。它将数据存储在内存中,而不是磁

    2024年01月22日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包