File文件和目录路径名的抽象表示形式。即,Java中把文件或者目录(文件夹)都封装成File对象。也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可。
File(String pathname); // 将一个字符串路径封装成File对象
File(String parent,String child); // 根据指定的父路径和文件路径创建File对象
// 例如:File file = new File("F://", "a.txt");最终file对象的路径就是F:/a.txt
File(File parent,String child); // 根据指定的父路径对象和文件路径创建File对象
/* 例如:
* File file = new File("F://");
* File file2 = new File(file , "a.txt");
* 最终file对象的路径就是F:/a.txt
*/
构造方法只是创建一个File对象,在磁盘上并没有创建对应的文件
以下功能会对磁盘上的对应的文件进行创建或删除操作
boolean createNewFile(); // 指定路径不存在该文件时时创建文件,返回true,否则返回false
boolean mkdir(); // 当指定的单级文件夹不存在时创建文件夹并返回true,否则返回false
boolean mkdirs(); // 当指定的多级文件夹某一级文件夹不存在时,创建多级文件夹并返回true,否则返回false
boolean delete(); // 删除文件或者删除单级文件夹
boolean exists(); // 判断指定路径的文件或文件夹是否存在
boolean isAbsolute(); // 判断当前路路径是否是绝对路径
boolean isDirectory(); // 判断当前的目录是否存在
boolean isFile(); // 判断当前路径是否是一个文件
boolean isHidden(); // 判断当前路径是否是隐藏文件
File getAbsoluteFile(); // 获取文件的绝对路径,返回File对象
String getAbsolutePath(); // 获取文件的绝对路径,返回路径的字符串
String getParent(); // 获取当前路径的父级路径,以字符串形式返回该父级路径
File getParentFile(); // 获取当前路径的父级路径,以字File对象形式返回该父级路径
String getName(); // 获取文件或文件夹的名称
String getPath(); // 获取File对象中封装的路径
long lastModified(); // 以毫秒值返回最后修改时间
long length(); // 返回文件的字节数
boolean renameTo(File dest); // 将当前File对象所指向的路径 修改为 指定File所指向的路径
String[] list(); // 以字符串数组的形式返回当前路径下所有的文件和文件夹的名称
File[] listFiles(); // 以File对象的形式返回当前路径下所有的文件和文件夹的名称
static File[] listRoots(); // 获取计算机中所有的盘符
IO流分类:
流向
输入流 读取数据 FileReader Reader
输出流 写出数据 FileWriter Writer
数据类型
字节流
字节输入流 读取数据 InputStream
字节输出流 写出数据 OutputStream
字符流
字符输入流 读取数据 Reader
字符输出流 写出数据 Writer
字符流
// 创建一个文本文件,并给里面赋值
File file = new File("F://a.txt");
// 向文件中写入数据
// 创建字符输出流对象
FileWriter fileWriter = new FileWriter(file);
fileWriter.write("hello\r\n");
fileWriter.write("world\r\n");
fileWriter.write("123");
// 关流
fileWriter.close();
// 读取源文件
// 创建字符输入流对象
FileReader fileReader = new FileReader(file);
// 创建目标文件
File file2 = new File("F://b.txt");
// 读取数据
// 创建字符数组
char[] ch = new char[1024];
// 创建长度
int leng = -1;
// 创建循环读取数据
while ((leng = fileReader.read(ch)) != -1) {
// 创建字符输出流对象
FileWriter fileWriter2 = new FileWriter(file2);
// 将读取到的数据输出
fileWriter2.write(ch, 0, leng);
// 关流
fileWriter2.close();
}
// 关流
fileReader.close();
字节流
// 创建字节输出流对象
File file = new File("F://a.txt");
FileOutputStream fileOutputStream = new FileOutputStream(file);
// 创建字符数组
char[] b = {'h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd'};
for (char c : b) {
// 将char中的数据写入文件中
fileOutputStream.write(c);
}
// 关流
fileOutputStream.close();
// 创建字节输入流对象
FileInputStream fileInputStream = new FileInputStream(file);
// 创建字节输出流对象
File file2 = new File("F://b.txt");
FileOutputStream fileOutputStream2 = new FileOutputStream(file2);
// 读取文件
byte[] ch = new byte[1024];
int len = -1;
while((len = fileInputStream.read(ch)) != -1) {
fileOutputStream2.write(ch, 0, len);
}
// 关流
fileOutputStream2.close();
fileInputStream.close();
字节流可以操作所有类型的文件视频、图片都能使用
,因为所有的文件在计算机中都是以字节形式存储
而字符流只能用来操作纯文本类型的文件,不能操作字节类型的文件
实现代码与上述案例中字节流案例相同
是System下的类字段(被静态修饰的成员变量),都是字节流
public static final InputStream in; // 标准输入流
public static final PrintStream out; // 标准输出流
标准输入流,用来读取由键盘输入的数据
标准输出流,用来将数据以字节流的方式输出到控制台上
将任意数据类型
的数据打印到控制台上
字节打印流:PrintStream
字符打印流:PrintWriter
println(String str); // 打印完自动换行
print(String str); // 打印完不自动换行
自动换行 使用方法println()实现自动换行
自动刷新 创建PrintWriter对象时启动自动刷新开关,并且使用println等3个方法可以实现自动刷新
注意:创建FileWriter对象时boolean参数是是否追加,而创建打印流对象的boolean类型参数是是否自动刷新
用于从流中读取对象的
ObjectInputStream 称为 反序列化流,利用输入流从文件中读取对象
ObjectOutputStream 称为 序列化流,利用输出流向文件中写入对象
特点:用于操作对象。可以将对象写入到文件中,也可以从文件中读取对象。
当一个类的对象需要IO流进行读写的时候,这个类就必须实现序列化接口(Serializable)
Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
特点:
1、Hashtable的子类,map集合中的方法都可以用。
2、该集合没有泛型。键值都是字符串。
3、它是一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化的设备(硬盘、U盘、光盘)上。键值的来源也可以是持久化的设备。
4、有和流技术相结合的方法。
其中comments就是,显示在输出文件的第一行,一般用来描述文件中内容的,这个内容可以根据自己需求随便写