File
File类的使用
File对象既可以代表文件、也可以代表文件夹。它封装的对象仅仅是一个路径名,这个路径可以存在,也可以不存在
创建File类的对象
构造器 | 说明 |
---|---|
public File(String pathname) | 根据文件路径创建文件对象 |
public File(String parent, String child) | 根据父路径和子路径名字创建文件对象 |
public File(File parent, String child) | 根据父路径对应文件对象和子路径名字创建文件对象 |
1、File类的作用?
- 创建对象定位文件,可以删除、获取文件信息等。但是不能读写文件内容。
2、File类构建对象的方式 ?
- File file = new File(“文件/文件夹/绝对路径/相对路径”);
3、绝对路径和相对路径写法
- 绝对路径是带盘符的。
File file = new File(“D:\\itheima\\a.txt”);
- 相对路径是不带盘符的,默认到当前工程下寻找文件。
File file = new File(“模块名\\a.txt”);
File类的判断文件类型、获取文件信息功能
方法名称 | 说明 |
---|---|
public boolean isDirectory() | 判断此路径名表示的File是否为文件夹 |
public boolean isFile() | 判断此路径名表示的File是否为文件 |
public boolean exists() | 判断此路径名表示的File是否存在 |
public long length() | 返回文件的大小(字节数量) |
public String getAbsolutePath() | 返回文件的绝对路径 |
public String getPath() | 返回定义文件时使用的路径 |
public String getName() | 返回文件的名称,带后缀 |
public long lastModified() | 返回文件的最后修改时间(时间毫秒值) |
创建文件、删除文件
方法名称 | 说明 |
---|---|
创建文件的功能 | |
public boolean mkdir() | 只能创建一级文件夹 |
public boolean mkdirs() | 可以创建多级文件夹 |
public boolean createNewFile() | 创建一个新的空的文件 |
删除文件的功能 | delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站 |
public boolean delete() | 删除文件、空文件夹 |
遍历文件夹
方法名称 | 说明 |
---|---|
public String[] list() | 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。 |
public File[] listFiles() | 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点) |
使用listFiles方法时的注意事项
- 当主调是文件,或者路径不存在时,返回null
- 当主调是空文件夹时,返回一个长度为0的数组
- 当主调是一个非空文件夹,但是没有权限访问该文件夹时,返回null
字符集
字符集简介
标准ASCII字符集
ASCII(American Standard Code for Information Interchange):
美国信息交换标准代码,包括了英文、符号等。- 标准ASCII使用1个字节存储一个字符,首尾是0,总共可表示128个字符,对美国佬来说完全够用。
常见字符集底层字符的编码是什么样的?
-
GBK(汉字内码扩展规范,国标)
- 汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储。
- 注意:GBK兼容了ASCII字符集。
1xxxxxxx xxxxxxxx 0xxxxxxx 1xxxxxxx xxxxxxxx
- GBK规定: 汉字的第一个字节的第一位必须是 1
- GBK字符中一个中文字符占2个字节
-
Unicode字符集(统一码,也叫万国码)
- Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集。
- 英文和数字等在任何国家的字符集中都占1个字节
-
UTF-32 : 4个字节表示一个字符
-
UTF-8
- 是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节
- 英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节。
-
UTF-8编码方式(二进制) 0xxxxxxx (ASCII码) 110xxxxx 10xxxxxx 1110xxxx 10xxxxxx 10xxxxxx 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
总结
- 常见字符集有哪些?各自存储数据的特点是什么?
- ASCII字符集:只有英文、数字、符号等,占1个字节。
- GBK字符集:汉字占2个字节,英文、数字占1个字节。
- UTF-8字符集:汉字占3个字节,英文、数字占1个字节。
字符集的编码、解码操作
编码: 把字符按照指定字符集缩码成字节
解码: 把字节按照指定字符集解码成字符
String方法 | 说明 |
---|---|
对字符的编码 | |
byte[] getBytes() | 使用平台的默认字符集将该String编码为一系列字节,将结果存储到新的字节数组中 |
byte[] getBytes(String charsetName) | 使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中 |
对字符的解码 | |
String(byte[] bytes) | 通过使用平台的默认字符集解码指定的字节数组来构造新的String |
String(byte[] bytes, String charsetName) | 通过指定的字符集解码指定的字节数组来构造新的String |
注意:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码 |
IO流
IO流:概述
IO流分类
字节输入流 | 以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流 |
---|---|
字节输出流 | 以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流。 |
字符输入流 | 以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流。 |
字符输出流 | 以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流。 |
IO流:字节流
IO流体系
FileInputStream(文件字节输入流)
作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中来。
构造器 | 说明 |
---|---|
public FileInputStream(File file) | 创建字节输入流管道与源文件接通 |
public FileInputStream(String pathname) | 创建字节输入流管道与源文件接通 |
方法名称 | 说明 |
---|---|
public int read() | 每次读取一个字节返回,如果发现没有数据可读会返回-1. |
public int read(byte[] buffer) | 每次用一个字节数组去读取数据,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1. |
注意: 使用FileInputStream每次读取一个字节,读取性能差,并且读取汉字输出会乱码
FileInputStream(文件字节输入流)
作用:以内存为基准,把文件中的数据以字节的形式读入到内存中来。
方法名称 | 说明 |
---|---|
public int read() | 每次读取一个字节返回,如果发现没有数据可读会返回-1. |
public int read(byte[] buffer) | 每次用一个字节数组去读取数据,返回字节数组读取了多少个字节, 如果发现没有数据可读会返回-1. |
注意: 使用FileInputStream每次读取多个字节,读取性能得到了提升,但读取汉字输出还是会乱码。
文件字节输入流:一次读取完全部字节
方式一:自己定义一个字节数组与被读取的文件大小一样大,然后使用该字节数组,一次读完文件的全部字节。
方式二:Java官方为InputStream提供了如下方法,可以直接把文件的全部字节读取到一个字节数组中返回。
方法名称 | 说明 |
---|---|
public int read(byte[] buffer) | 每次用一个字节数组去读取,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1. |
public byte[] readAllBytes() | 直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返回 |
提问
- 直接把文件数据全部读取到一个字节数组可以避免乱码,是否存在问题?
- 如果文件过大,创建的字节数组也会过大,可能引起内存溢出。
- 读写文本内容更适合用 字符流
- 字节流 适合做数据的转移, 如: 文件复制等
FileOutputStream(文件字节输出流)
作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去。
构造器 | 说明 |
---|---|
public FileOutputStream(File file) | 创建字节输出流管道与源文件对象接通 |
public FileOutputStream(String filepath) | 创建字节输出流管道与源文件路径接通 |
public FileOutputStream(File file,boolean append) | 创建字节输出流管道与源文件对象接通,可追加数据 |
public FileOutputStream(String filepath,boolean append) | 创建字节输出流管道与源文件路径接通,可追加数据 |
方法名称 | 说明 |
---|---|
public void write(int a) | 写一个字节出去 |
public void write(byte[] buffer) | 写一个字节数组出去 |
public void write(byte[] buffer , int pos , int len) | 写一个字节数组的一部分出去。 |
public void close() throws IOException | 关闭流。 |
- 字节输出流如何实现写出去的数据可以换行?
- 写"\r\n"的字节数组表示形式
# 文件-IO&字节流
File
File类的使用
File对象既可以代表文件、也可以代表文件夹。它封装的对象仅仅是一个路径名,这个路径可以存在,也可以不存在
创建File类的对象
构造器 | 说明 |
---|---|
public File(String pathname) | 根据文件路径创建文件对象 |
public File(String parent, String child) | 根据父路径和子路径名字创建文件对象 |
public File(File parent, String child) | 根据父路径对应文件对象和子路径名字创建文件对象 |
1、File类的作用?
- 创建对象定位文件,可以删除、获取文件信息等。但是不能读写文件内容。
2、File类构建对象的方式 ?
- File file = new File(“文件/文件夹/绝对路径/相对路径”);
3、绝对路径和相对路径写法
- 绝对路径是带盘符的。
File file = new File(“D:\\itheima\\a.txt”);
- 相对路径是不带盘符的,默认到当前工程下寻找文件。
File file = new File(“模块名\\a.txt”);
File类的判断文件类型、获取文件信息功能
方法名称 | 说明 |
---|---|
public boolean isDirectory() | 判断此路径名表示的File是否为文件夹 |
public boolean isFile() | 判断此路径名表示的File是否为文件 |
public boolean exists() | 判断此路径名表示的File是否存在 |
public long length() | 返回文件的大小(字节数量) |
public String getAbsolutePath() | 返回文件的绝对路径 |
public String getPath() | 返回定义文件时使用的路径 |
public String getName() | 返回文件的名称,带后缀 |
public long lastModified() | 返回文件的最后修改时间(时间毫秒值) |
创建文件、删除文件
方法名称 | 说明 |
---|---|
创建文件的功能 | |
public boolean mkdir() | 只能创建一级文件夹 |
public boolean mkdirs() | 可以创建多级文件夹 |
public boolean createNewFile() | 创建一个新的空的文件 |
删除文件的功能 | delete方法默认只能删除文件和空文件夹,删除后的文件不会进入回收站 |
public boolean delete() | 删除文件、空文件夹 |
遍历文件夹
方法名称 | 说明 |
---|---|
public String[] list() | 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。 |
public File[] listFiles() | 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点) |
使用listFiles方法时的注意事项
- 当主调是文件,或者路径不存在时,返回null
- 当主调是空文件夹时,返回一个长度为0的数组
- 当主调是一个非空文件夹,但是没有权限访问该文件夹时,返回null
字符集
字符集简介
标准ASCII字符集
ASCII(American Standard Code for Information Interchange):
美国信息交换标准代码,包括了英文、符号等。- 标准ASCII使用1个字节存储一个字符,首尾是0,总共可表示128个字符,对美国佬来说完全够用。
常见字符集底层字符的编码是什么样的?
-
GBK(汉字内码扩展规范,国标)
- 汉字编码字符集,包含了2万多个汉字等字符,GBK中一个中文字符编码成两个字节的形式存储。
- 注意:GBK兼容了ASCII字符集。
1xxxxxxx xxxxxxxx 0xxxxxxx 1xxxxxxx xxxxxxxx
- GBK规定: 汉字的第一个字节的第一位必须是 1
- GBK字符中一个中文字符占2个字节
-
Unicode字符集(统一码,也叫万国码)
- Unicode是国际组织制定的,可以容纳世界上所有文字、符号的字符集。
- 英文和数字等在任何国家的字符集中都占1个字节
-
UTF-32 : 4个字节表示一个字符
-
UTF-8
- 是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节
- 英文字符、数字等只占1个字节(兼容标准ASCII编码),汉字字符占用3个字节。
-
UTF-8编码方式(二进制) 0xxxxxxx (ASCII码) 110xxxxx 10xxxxxx 1110xxxx 10xxxxxx 10xxxxxx 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
总结
- 常见字符集有哪些?各自存储数据的特点是什么?
- ASCII字符集:只有英文、数字、符号等,占1个字节。
- GBK字符集:汉字占2个字节,英文、数字占1个字节。
- UTF-8字符集:汉字占3个字节,英文、数字占1个字节。
字符集的编码、解码操作
编码: 把字符按照指定字符集缩码成字节
解码: 把字节按照指定字符集解码成字符
String方法 | 说明 |
---|---|
对字符的编码 | |
byte[] getBytes() | 使用平台的默认字符集将该String编码为一系列字节,将结果存储到新的字节数组中 |
byte[] getBytes(String charsetName) | 使用指定的字符集将该String编码为一系列字节,将结果存储到新的字节数组中 |
对字符的解码 | |
String(byte[] bytes) | 通过使用平台的默认字符集解码指定的字节数组来构造新的String |
String(byte[] bytes, String charsetName) | 通过指定的字符集解码指定的字节数组来构造新的String |
注意:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码 |
IO流
IO流:概述
IO流分类
字节输入流 | 以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流 |
---|---|
字节输出流 | 以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流。 |
字符输入流 | 以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流。 |
字符输出流 | 以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流。 |
IO流:字节流
IO流体系
FileInputStream(文件字节输入流)
作用:以内存为基准,可以把磁盘文件中的数据以字节的形式读入到内存中来。
构造器 | 说明 |
---|---|
public FileInputStream(File file) | 创建字节输入流管道与源文件接通 |
public FileInputStream(String pathname) | 创建字节输入流管道与源文件接通 |
方法名称 | 说明 |
---|---|
public int read() | 每次读取一个字节返回,如果发现没有数据可读会返回-1. |
public int read(byte[] buffer) | 每次用一个字节数组去读取数据,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1. |
注意: 使用FileInputStream每次读取一个字节,读取性能差,并且读取汉字输出会乱码
FileInputStream(文件字节输入流)
作用:以内存为基准,把文件中的数据以字节的形式读入到内存中来。
方法名称 | 说明 |
---|---|
public int read() | 每次读取一个字节返回,如果发现没有数据可读会返回-1. |
public int read(byte[] buffer) | 每次用一个字节数组去读取数据,返回字节数组读取了多少个字节, 如果发现没有数据可读会返回-1. |
注意: 使用FileInputStream每次读取多个字节,读取性能得到了提升,但读取汉字输出还是会乱码。
文件字节输入流:一次读取完全部字节
方式一:自己定义一个字节数组与被读取的文件大小一样大,然后使用该字节数组,一次读完文件的全部字节。
方式二:Java官方为InputStream提供了如下方法,可以直接把文件的全部字节读取到一个字节数组中返回。
方法名称 | 说明 |
---|---|
public int read(byte[] buffer) | 每次用一个字节数组去读取,返回字节数组读取了多少个字节,如果发现没有数据可读会返回-1. |
public byte[] readAllBytes() | 直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返回 |
提问
- 直接把文件数据全部读取到一个字节数组可以避免乱码,是否存在问题?
- 如果文件过大,创建的字节数组也会过大,可能引起内存溢出。
- 读写文本内容更适合用 字符流
- 字节流 适合做数据的转移, 如: 文件复制等
FileOutputStream(文件字节输出流)
作用:以内存为基准,把内存中的数据以字节的形式写出到文件中去。
构造器 | 说明 |
---|---|
public FileOutputStream(File file) | 创建字节输出流管道与源文件对象接通 |
public FileOutputStream(String filepath) | 创建字节输出流管道与源文件路径接通 |
public FileOutputStream(File file,boolean append) | 创建字节输出流管道与源文件对象接通,可追加数据 |
public FileOutputStream(String filepath,boolean append) | 创建字节输出流管道与源文件路径接通,可追加数据 |
方法名称 | 说明 |
---|---|
public void write(int a) | 写一个字节出去 |
public void write(byte[] buffer) | 写一个字节数组出去 |
public void write(byte[] buffer , int pos , int len) | 写一个字节数组的一部分出去。 |
public void close() throws IOException | 关闭流。 |
- 字节输出流如何实现写出去的数据可以换行?
- 写"\r\n"的字节数组表示形式