File是文件
和目录路径名
的抽象表示形式。
即,Java中把文件或者目录(文件夹)都封装成File对象。
也就是说如果我们要去操作硬盘上的文件,或者文件夹只要找到File这个类即可
那么我们就要研究研究File这个类中都有那些功能可以操作文件或者文件夹呢
File(String pathname)
将一个字符串路径封装成File对象File(String parent,String child)
传入一个父级路径和子级路径File(File parent,String child)
传入一个File类型的父级路径和子级路径 public static void main(String[] args) {
//1.直接写文件路径或者文件名
// java.io.File.File(String pathname)
File file1 = new File("demoIO.txt");
//2.java.io.File.File(String parent, String child)
// 路径拼接
File file2 = new File("D:/", "a.txt");
//3.java.io.File.File(File parent, String child)
// 文件对象和路径/文件拼接
File file3 = new File(file2, "b.txt");
}
相对路径:以盘符开头
绝对路径:以参照物开头,不能以盘符开头
public static void main(String[] args) throws IOException {
// 1.创建文件
File f1 = new File("demoIO.txt");
System.out.println(f1.createNewFile()); // true
// 2.创建文件夹
File f2 = new File("demoIO.txt"); // false,已经存在该对象
System.out.println(f1.mkdir());
File f3 = new File("a.txt");
System.out.println(f3.mkdir()); // true 目录名为a.txt
// 3.创建多级文件目录
File f4 = new File("a/b/c");
System.out.println(f4.mkdirs()); // true
// 4.删除文件/文件夹
System.out.println(f1.delete()); // true
System.out.println(f2.delete()); // false
System.out.println(f3.delete()); // true
System.out.println(f4.delete()); // true a/b目录仍存在
System.out.println(new File("a").delete()); //false 只能删除空目录
}
public static void main(String[] args) throws IOException {
File f1 = new File("a.txt");
File f2 = new File("a");
// 1.判断文件、文件夹是否存在
System.out.println(f1.exists());
System.out.println(f2.exists());
// 2.判断是否问绝对路径
System.out.println(f1.isAbsolute());
// 3.判断是否有隐藏属性
System.out.println(f2.isHidden());
// 4.判断是否是一个文件,若不存在也返回false
System.out.println(f1.isFile());
System.out.println(f2.isFile());
// 5.判断是否否是一个文件夹,若不存在也返回false
System.out.println(f1.isDirectory());
System.out.println(f2.isDirectory());
}
public static void main(String[] args) throws IOException {
File f1 = new File("a.txt");
File f2 = new File("a/b");
// 1.获取文件、文件夹的绝对路径
System.out.println(f1.getAbsolutePath()); // E:\eclipse\myIO\a.txt
System.out.println(f2.getAbsolutePath()); // E:\eclipse\myIO\a\b
System.out.println(new File("a/b/c/d/e").getAbsoluteFile());
//E:\eclipse\myIO\a\b\c\d\e;调用了file的toString()
// 2.获取文件、文件夹 构造时的参数路径
System.out.println(f1.getPath()); // a.txt
System.out.println(f2.getPath()); // a\b
System.out.println(new File(f2, "c").getPath()); // a\b\c
// 3.获取构造时文件的上一层目录
System.out.println(f1.getParent()); // null
System.out.println(f2.getParent()); // a
System.out.println(new File(f1, "d").getParent()); // a.txt
System.out.println(new File(f2, "d").getParent()); // a\b
System.out.println(new File("a/b/c/c").getParent()); // a\b\c
// 4.获取文件夹/文件名称
System.out.println(new File("a/b/c").getName()); // c
System.out.println(new File("a.txt").getName()); // a.txt
// 5.获取文件最后的修改时间
System.out.println(new File("a.txt").lastModified()); // 0 文件不存在
// 6.文件重命名
System.out.println(f1.renameTo(f2)); //false 不能将文件命名为文件夹
System.out.println(f2.mkdirs()); // false
System.out.println(f2.renameTo(new File("b.txt"))); // true
// 7.获取文件大小 bytes 文件夹为0
f1.createNewFile();
System.out.println(f1.length());
}
public static void main(String[] args) throws IOException {
// 1.String[] java.io.File.list()
// 获取该文件夹下的所有内容的名称,包括隐藏的文件夹和文件
System.out.println(new File("").getAbsolutePath()); // E:\eclipse\myIO
System.out.println(new File("").list()); // null 为何?
System.out.println(new File(".").getAbsolutePath()); // E:\eclipse\myIO\.
for (String value: new File(".").list()) {
System.out.println(value);
// 输出 E:\eclipse\myIO下的所有内容
}
System.out.println(new File("/").getAbsolutePath()); // E:\
System.out.println(new File("\\").getAbsolutePath()); // E:\
// 2.File[] java.io.File.listFiles()获取的是文件对象
for (File file: new File(".").listFiles()) {
System.out.println(file);
}
// 指向文件时,返回null
System.out.println(new File("a.txt").listFiles());
// 3.File[] java.io.File.listRoots()返回本机的所有盘符
for (File value: new File("").listRoots()) {
System.out.println(value); // C:\
}
}
1.判断file对象为文件夹
2.获取文件夹下所有newFile对象
3.判断newFile对象为文件,判断文件类型为.java
4.判断newFile对象为文件夹,重复2、3、4步骤
public static void getJavaFile(File file) {
if (file.isDirectory()) {
for (File f : file.listFiles()) {
if (f.isFile()) {
if (f.getName().endsWith(".java")) {
System.out.println(f.getName());
}
} else {
getJavaFile(f);
}
}
}
}
1.判断file对象为文件夹
2.获取文件夹下所有newFlie对象
3.判断newFile对象为文件,直接删除
4.判断newFile对象为文件夹,重复1,2,3步骤
5.删除该file对象
public static void deleteFile(File file) {
if (file.isDirectory()) {
for (File newFile: file.listFiles()) {
if (newFile.isFile()) {
System.out.println(newFile.getName());
newFile.delete();
} else {
deleteFile(newFile);
}
}
}
System.out.println(file.getName());
file.delete();
}
IO流分类:
一次读一个字符或者一个字节,返回类型都是Int
一次读一个数组,分别将char[]和byte[]数组作为参数
public static void main(String[] args) throws IOException {
//创建字符输入流对象
FileReader fr = new FileReader("IODemo.java");
//创建字符输出流对象
FileWriter fw = new FileWriter("d:\\IODemo.java");
//一次读写一个字符
/*int ch;
while((ch = fr.read()) != -1) {
fw.write(ch);
fw.flush();
}*/
//一次读写一个字符数组
int len; //用于存储读到的字符个数
char[] chs = new char[1024];
while ((len = fr.read(chs)) != -1) {
fw.write(chs, 0, len);
fw.flush();
}
//释放资源
fw.close();
fr.close();
}
// 打印文件夹下的所有.java文件
public static void main(String[] args) throws IOException {
// 1.创建输入流对象
FileInputStream fis = new FileInputStream("a.txt");
// 创建输出流对象
FileOutputStream fos = new FileOutputStream("b.txt");
// 2.读写数据
// 2.1一次读写一个byte
// int in;//读到的内容
// while ((in = fis.read()) != -1) {
// System.out.println(in);
// fos.write(in);
// }
// 2,2一次读写一个数组
int len;
byte[] by = new byte[1024]; // 一个汉字占3个字节
while ((len = fis.read(by)) != -1) {
fos.write(by, 0, len);
// fos.flush(); 字节流不需要刷新
}
// 3.释放资源
fos.close();
fis.close();
}
复制以后图片大小增加了,打开失败
public static void main(String[] args) throws IOException {
// 1.创建输入流对象
FileReader fis = new FileReader("1.png");
// 创建输出流对象
FileWriter fos = new FileWriter("2.png");
// 2.读写数据
// 2.1一次读写一个byte
// int in;//读到的内容
// while ((in = fis.read()) != -1) {
// System.out.println(in);
// fos.write(in);
// }
// 2,2一次读写一个数组
int len;
char[] by = new char[1024]; // 一个汉字占3个字节
while ((len = fis.read(by)) != -1) {
fos.write(by, 0, len);
// fos.flush(); 字节流不需要刷新
}
// 3.释放资源
fos.close();
fis.close();
}
可以复制,图片从上往下复制;
复制后文件大小不变
public static void main(String[] args) throws IOException {
// 1.创建输入流对象
FileInputStream fis = new FileInputStream("1.png");
// 创建输出流对象
FileOutputStream fos = new FileOutputStream("2.png");
// 2.读写数据
// 2.1一次读写一个byte
// int in;//读到的内容
// while ((in = fis.read()) != -1) {
// System.out.println(in);
// fos.write(in);
// }
// 2,2一次读写一个数组
int len;
byte[] by = new byte[1024]; // 一个汉字占3个字节
while ((len = fis.read(by)) != -1) {
fos.write(by, 0, len);
// fos.flush(); 字节流不需要刷新
}
// 3.释放资源
fos.close();
fis.close();
}