文章目录
File类
概述:在包java.io.File
下、代表操作系统的文件对象(文件、文件夹);
File类创建对象常用方法:
方法名 | 说明 |
---|---|
public File(String pathname) | 根据文件路径创建文件对象 |
public File(String parent, String child) | 根据父路径名字符串和子路径名字符串创建文件对象 |
public File(File parent, String child) | 根据父路径对应文件对象和子路径名字符串创建文件对象 |
package cn.edu.njust.file;
import java.io.File;
public class Demo01 {
public static void main(String[] args) {
// 1.创建File对象 -- 绝对路径访问
File file = new File("C:\\Users\\NJUST'er'wang's\\Pictures\\MyWallPaper\\02_WallPaper.jpg");
// 获取文件的字节大小
long size = file.length();
System.out.println(size);
// file对象支持绝对路径,也支持相对路径
// 相对工程 从工程名开始
File file1 = new File("day01/src/data.txt");
long size1 = file1.length();
System.out.println(size1);
}
}
常用API
方法名 | 说明 |
---|---|
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() | 返回文件的最后修改时间(时间毫秒值) |
File类创建和删除文件:
方法名称 | 说明 |
---|---|
public boolean createNewFile() | 创建一个新的空的文件 |
public boolean mkdir() | 只能创建一级文件夹 |
public boolean mkdirs() | 可以创建多级文件夹 |
public boolean delete() | 删除由此抽象路径名表示的文件或空文件夹 |
- 注意:delete方法删除的文件不会进入回收站;
遍历文件夹
遍历功能:
方法名称 | 说明 |
---|---|
public String[] list() | 获取当前目录下所有的"一级文件名称"到一个字符串数组中去返回。 |
public File[] listFiles()(常用) | 获取当前目录下所有的"一级文件对象"到一个文件对象数组中去返回(重点) |
注意事项:
- 当文件不存在时或者代表文件时,返回null;
- 当文件对象代表一个空文件夹时,返回一个长度为0的数组;
- 当文件对象是一个有内容的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回;
- 当文件对象是一个有隐藏文件的文件夹时,将里面所有文件和文件夹的路径放在File数组中返回,包含隐藏文件;
- 当没有权限访问该文件夹时,返回null;
方法递归–文件搜索
package cn.edu.njust.file;
import java.io.File;
public class Demo03 {
public static void main(String[] args) {
// 递归找文件
searchFile(new File("D:/"),"Season.java");
}
/**
*
* @param dir 被搜索源目录
* @param fileName 被搜索文件名
*/
public static void searchFile(File dir,String fileName){
// 判断是否是文件夹
if (dir != null) {
// 提取当前文件下的一级文件对象
File[] files = dir.listFiles();
// 判断是否存在一级文件
if (files != null && files.length>0) {
for (File file: files) {
// 判断一级文件类型
if (file.isFile()) {
// 判断是否是所需要的文件名
if (file.getName().equals(fileName)) {
System.out.println("文件已找到");
System.out.println("路径为:" + file.getAbsolutePath());
return;
}
}else {
// 是文件夹时
searchFile(file,fileName);
}
}
}
} else {
System.out.println("该文件为空");
}
}
}
字符集
简介
字符集基本知识:
- 计算机底层不可以直接存储字符。计算机中底层智能存储二进制(0,1);
- 二进制是可以转换成十进制的;
- 计算机底层可以表示十进制编号。计算机可以给人类字符进行编号存储,这套编号规则称为字符集;
分类:
ASCII
字符集GBK
字符集Unicode(UTF-8)
字符集等。
字符集的解码、解码操作
String编码:
方法名称 | 说明 |
---|---|
byte[] getBytes() | 使用平台的默认字符集将该 String编码为一系列字节,将结果存储到新的字节数组中 |
byte[] getBytes(String charsetName) | 使用指定的字符集将该 String编码为一系列字节,将结果存储到新的字节数组中 |
String解码:
构造器 | 说明 |
---|---|
String(byte[] bytes) | 通过使用平台的默认字符集解码指定的字节数组来构造新的 String |
String(byte[] bytes, String charsetName) | 通过指定的字符集解码指定的字节数组来构造新的 String |
IO控制
简介:IO流也称为输入、输出流,就是用来读写数据的;
- I表示
intput
,把硬盘文件中的数据读入到内存的过程,称之输入,负责读。 - O表示
output
,把内存中的数据写出到硬盘文件的过程,称之输出,负责写。
IO流的分类:
- 按流的方向分:输入流、输出流;
- 按流中的数据最小单位分为:字节流、字符流;
总结流的四大类:
- 字节输入流:以内存为基准,来自磁盘文件/网络中的数据以字节的形式读入到内存中去的流称为字节输入流。
- 字节输出流:以内存为基准,把内存中的数据以字节写出到磁盘文件或者网络中去的流称为字节输出流。
- 字符输入流:以内存为基准,来自磁盘文件/网络中的数据以字符的形式读入到内存中去的流称为字符输入流。
- 字符输出流:以内存为基准,把内存中的数据以字符写出到磁盘文件或者网络介质中去的流称为字符输出流。
字节流
分为InputStream
和OutputStream
;
读取字节流
每次读一个字节
文件字节输入流:FileInputStream
作用:以内存为基准,把磁盘文件中的数据以字节的形式读取到内存中去。
构造器 | 说明 |
---|---|
public FileInputStream(File file) | 创建字节输入流管道与源文件对象接通 |
public FileInputStream(String pathname) | 创建字节输入流管道与源文件路径接通 |
方法名称 | 说明 |
---|---|
public int read() | 每次读取一个字节返回,如果字节已经没有可读的返回-1 |
public int read(byte[] buffer) | 每次读取一个字节数组返回,如果字节已经没有可读的返回-1 |
每次读一个字节数组
文件字节输入流:FileInputStream
作用:以内存为基准,把磁盘文件中的数据以字节的形式读取到内存中去。
方法名称 | 说明 |
---|---|
public int read() | 每次读取一个字节返回,如果字节已经没有可读的返回-1 |
public int read(byte[] buffer) | 每次使用字节数组来读取数据,返回读取的字节个数,如果没有可读返回-1 |
读取全部字节
方法名称 | 说明 |
---|---|
public int read(byte[] buffer) | 每次读取一个字节数组返回,如果字节已经没有可读的返回-1 |
public byte[] readAllBytes() throws IOException | 直接将当前字节输入流对应的文件对象的字节数据装到一个字节数组返回 |
输出字节流
文件字节输出流:FileOutputStream
作用:以内存为基准,把内存中的数据以字节的形式写出到磁盘文件中去的流。
构造器 | 说明 |
---|---|
public FileOutputStream(File file) | 创建字节输出流管道与源文件对象接通 |
public FileOutputStream(File file,boolean append) | 创建字节输出流管道与源文件对象接通,可追加数据 |
public FileOutputStream(String filepath) | 创建字节输出流管道与源文件路径接通 |
public FileOutputStream(String filepath,boolean append) | 创建字节输出流管道与源文件路径接通,可追加数据 |
文件字节输出流(FileOutputStream)写数据出去的API
方法名称 | 说明 |
---|---|
public void write(int a) | 写一个字节出去 |
public void write(byte[] buffer) | 写一个字节数组出去 |
public void write(byte[] buffer , int pos , int len) | 写一个字节数组的一部分出去。 |
流的关闭与刷新
方法 | 说明 |
---|---|
flush() | 刷新流,还可以继续写数据 |
close() | 关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据 |
字符流
简介:最小单位是单个字符
文件字符输入流:Reader
作用:以内存为基准,把磁盘文件中的数据以字符的形式读取到内存中去。
构造器 | 说明 |
---|---|
public FileReader(File file) | 创建字符输入流管道与源文件对象接通 |
public FileReader(String pathname) | 创建字符输入流管道与源文件路径接通 |
public int read() | 每次读取一个字符返回,如果字符已经没有可读的返回-1 |
public int read(char[] buffer) | 每次读取一个字符数组,返回读取的字符个数,如果字符已经没有可读的返回-1 |
一次读取一个字符:
package cn.edu.njust.io;
import java.io.FileReader;
import java.io.Reader;
public class Demo01 {
public static void main(String[] args) throws Exception{
// 目标:每次读取一个字符
// 1.创建一个字符输入流管道与源文件接通
Reader fr = new FileReader("day01\\src\\data.txt");
// 2.读取一个字符
int code = fr.read();
System.out.println((char) code);
int code1 = fr.read();
System.out.println((char) code1);
System.out.println("---------------------");
// 3.使用循环读取字符(读取真个文件)
int code2;
while ((code2 = fr.read()) != -1) {
System.out.print((char) code2);
}
}
}
data.txt
文件
相遇的时间从来不分对错,无非是你的胆子太小。
一次读取一个字符数组:
文件字符输入流:FileReader
作用:以内存为基准,把磁盘文件中的数据以字符的形式读取到内存中去。
方法名称 | 说明 |
---|---|
public int read() | 每次读取一个字符返回,如果字符已经没有可读的返回-1 |
public int read(char[] buffer) | 每次读取一个字符数组,返回读取的字符数,如果字符已经没有可读的返回-1 |
package cn.edu.njust.io;
import java.io.FileReader;
import java.io.Reader;
public class Demo02 {
public static void main(String[] args) throws Exception {
// 目标:每次读取一个字符数组
// 1.创建一个字符输入流管道与源文件接通
Reader fr = new FileReader("day01\\src\\data.txt");
// 2.用循环,每次读取一个字符数组数据
char[] buffer = new char[1024];
int len;
while ((len = fr.read(buffer)) != -1) {
String rs = new String(buffer,0,len);
System.out.print(rs);
}
}
}
相遇的时间从来不分对错,无非是你的胆子太小。
文件字符输出流:FileWriter
作用:以内存为基准,把内存中的数据以字符的形式写出到磁盘文件中去的流。
构造器 | 说明 |
---|---|
public FileWriter(File file) | 创建字符输出流管道与源文件对象接通 |
public FileWriter(File file,boolean append) | 创建字符输出流管道与源文件对象接通,可追加数据 |
public FileWriter(String filepath) | 创建字符输出流管道与源文件路径接通 |
public FileWriter(String filepath,boolean append) | 创建字符输出流管道与源文件路径接通,可追加数据 |
FileWriter常用API:
方法名称 | 说明 |
---|---|
void write(int c) | 写一个字符 |
void write(char[] cbuf) | 写入一个字符数组 |
void write(char[] cbuf, int off, int len) | 写入字符数组的一部分 |
void write(String str) | 写一个字符串 |
void write(String str, int off, int len) | 写一个字符串的一部分 |
flush() | 刷新流,还可以继续写数据 |
close() | 关闭流,释放资源,但是在关闭之前会先刷新流。一旦关闭,就不能再写数据 |
资源释放方式
try-catch-finally
简介:
- finally:放在try-catch后面的,无论是正常执行还是异常执行代码,最后一定要执行,除非JVM退出。
- 作用:一般用于进行最后的资源释放操作(专业级做法)
try-with-resource
注意:
JDK 7
以及JDK 9
的()中只能放置资源对象,否则报错- 什么是资源呢?
- 资源都是实现了
Closeable/AutoCloseable
接口的类对象public abstract class InputStream implements Closeable {}
;public abstract class OutputStream implements Closeable, Flushable{}
;
快速链接
第1篇:Java基础部分–假期复习(关于String类的一些知识点)
第2篇:JavaSE_提高–static关键字、多态、部分常用API
第3篇:Java中的日期与时间、包装类、正则表示式简述、Arrays类、Lambda表达式的使用
第4篇:Java中的常用集合,包括List系列和Map系类、以及正则表达式的简单应用和红黑树原理
第5篇:JavaSE不可变集合、异常处理、Stream流
第6篇:Java中使用日志框架
第7篇:Java中的字符集和IO流
第8篇:Java中的线程