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());

相关推荐
剁椒豆腐脑23 分钟前
阶段二JavaSE进阶阶段之设计模式&继承 2.2
java·设计模式·跳槽·学习方法·改行学it
扫地僧98539 分钟前
免费1000套编程教学视频资料视频(涉及Java、python、C C++、R语言、PHP C# HTML GO)
java·c++·音视频
青春:一叶知秋42 分钟前
【C++开发】CMake构建工具
java·开发语言·c++
77tian1 小时前
Java Collections工具类:高效集合操作
java·开发语言·windows·microsoft·list
2401_826097621 小时前
JavaEE-Mybatis初阶
java·java-ee·mybatis
KIDAKN1 小时前
JavaEE->多线程2
java·算法·java-ee
wu_android1 小时前
Java匿名内部类访问全局变量和局部变量的注意事项
java·开发语言
喵手1 小时前
领导让我同事封装一个自定义工具类?结果她说要三小时...
java·后端·java ee
牛马baby1 小时前
synchronized 做了哪些优化?
java·高并发·并发编程·synchronized·锁升级·面试资料·程序员涨薪跳槽
钟琛......1 小时前
Java事务失效(面试题)的常见场景
java·数据库·spring