File—IO流

因为变量,数组,对象,集合这些数据容器都在内存中,一旦程序结束,或者断电,数据就丢失了。想要长久保存,就要存在文件中(File)

文件可以长久保存数据。

文件在电脑磁盘中保存,即便断电,或者程序终止,文件中的数据也不会丢失。

File类

File是Java.io.包下的类,File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹)。

File其对象代表具体的文件/文件夹,只能操作文件本身,调用其提供的方法对象进行操作。

注意:File类只能对文件本身进行操作,不能读写文件里面存储的数据。(用IO流读取数据()可以读写文件,或网络中的数据)

File对象既可以代表文件,也可以代表文件夹。

File封装的对象

复制代码
绝对路径:只要带盘符的都称为绝对路径
相对路径:不带盘符的,默认是你的idea工程下直接寻找文件的。一般用来找工程下的项目文件。都称为相对路径
java 复制代码
 File file1 = new File("E:\\java\\gittecode\\Javaai\\file-io\\FileDemo1");
        File file2 = new File(" Javaai\\file-io\\FileDemo1");

File类提供的创建和删除文件的方法

**注意:**delete方法默认只能删除空文件夹,删除后的文件不会进入回收站。

File提供的遍历文件夹的方法

使用listFiles方法时的注意事项:

当主调是文件,或者路径不存在时,返回null

当主调是空文件夹时,返回一个长度为0的数组

当主调是一个有内容的文件夹时,将里面所有一级文件和文件夹的路径放在File数组中返回

当主调是一个文件夹,且里面有隐藏文件时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件

当主调是一个文件夹,但是没有权限访问该文件夹时,返回null

UTF-8字符集

是Unicode字符的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节。

英文字符,数字等之占一个字节(兼容标准ASCLL编码),汉字字符占用3个字符

ASCII字符集:只有英文,数字,符号等,占一个字节。

GBK字符集:汉字占2个字节,英文,数字占一个字节。

UTF-8字符集:汉字占3个字节,英文,数字占1个字节。

**注意:1.**字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码。

**2.**英文,数学一般不会乱码,因为很多字符集都兼容了ASCII编码。

字符集的编码,解码操作

使用程序对字符串进行编码和解码操作

对字符的编码

对字符的解码

java 复制代码
public static void main(String[] args) throws UnsupportedEncodingException {
        String str = "宋可love";
        //byte[] bytes = str.getBytes();
        byte[] bytes = str.getBytes("GBK");
        System.out.println(bytes.length);
        System.out.println(Arrays.toString(bytes));
        //解码
        String s1 = new String(bytes);
        String s2 = new String(bytes,"GBK");

        System.out.println(s2);
    }

IO流

I指Input,称为输入流:负责把数据读到内存中去。

O指Output,称为输出流:负责写数据出去。

IO流按照流方向:分为输入流,输出流。

IO流按照流的内容:分为字节流(适合操作所有类型的文件),字符流(只适合操作纯文本文件)。

所以IO流分为四大体系:

FileInputStream(文件字节输入流)

作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中去。

注意事项:

1.使用FilelnputStream每次读取一个字节,读取性能较差,并且读取汉字输出会乱码。

2.使用FileInputStream每次读取多个字节,读取性能得到了提升,但读取汉字输出还是会乱码。

使用字节流读取中文要保证输出不乱码,可以定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。

一次读取完全部文件

注意:如果文件过大,创建的字节数组也会过大,可能会引起内存溢出。

读取文本适合用字符流,字节流适合用做数据的转移,比如:文件复制

FIleOutStream(文件字节输出流)、

作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去

字节输出流如何实现写出去的数据可以换行

.write("\r\n").getBytes());

相关推荐
wang09072 小时前
自己动手写一个spring之IOC_2
java·后端·spring
来杯@Java3 小时前
学生选课管理系统(基于springboot+vue前后端分离的项目)计算机毕业设计java
java·spring boot·spring·vue·毕业设计·maven·mybatis
不知名的老吴4 小时前
线程的生命周期之线程“插队“
java·开发语言·python
ANnianStriver4 小时前
PetLumina-02-后端开发与前后端联调
java·ai·sa-token
杨了个杨89824 小时前
Keepalived + Nginx + HAProxy 高可用架构部署实战案例
java·nginx·架构
马士兵教育6 小时前
Java还有前景吗?Java+AI大模型学习路线及项目?
java·人工智能·python·学习·机器学习
snow@li7 小时前
Java:理解 Gradle / 后端项目的管家 / 打包SpringBoot 应用 / 完成编译、下载依赖、运行测试、打包 JAR/WAR / 速查表
java
云烟成雨TD7 小时前
Spring AI 1.x 系列【57】动态工具发现:Tool Search Tool
java·人工智能·spring
zfoo-framework7 小时前
[修改代码使用]codex官方app中使用中转(不需要cc-switch) 1.config.toml 2.sk方式登录
java