Java 中使用 File 类创建文件
Java 中的 File 类在 Java 中,文件和文件流是处置处罚数据输入/输出的两个核心概念,它们是 Java I/O 操作的基础。
一、文件(File)
定义
[*]文件是操作系统中的存储单元,用于持久化保存数据(如文本、图片、二进制数据等)。
[*]在 Java 中,java.io.File 类(或 Java 7+ 的 java.nio.file.Path)用于表示文件或目录的抽象路径。
[*]文件本身不存储数据,而是通过路径指向磁盘上的具体数据。
二、File 类的介绍
https://i-blog.csdnimg.cn/direct/b526b29bb7954dac8f901ff4eec4c386.png#pic_center
1 创建文件对象的相关构造器
https://i-blog.csdnimg.cn/img_convert/472dbff264b4aae795ef1738e98649e1.png
[*] new File(File parent, String child) :将父路径(字符串情势)和子路径拼接成一个完备路径。自动处置处罚路径分隔符(如 Windows 的 \ 或 Linux 的 /)。
// 示例1:拼接父路径和子文件
String parentDir = "C:/Users/Test";
String childFile = "data.txt";
File file = new File(parentDir, childFile);
//会在2个目录之间自动加上'/'或'\'
System.out.println(file.getPath()); // 输出: C:\Users\Test\data.txt
// 示例2:拼接多级目录
File dir = new File("src", "main/java/com/example");
System.out.println(dir.getPath()); // 输出: src\main\java\com\example
[*] new File(String pathname) :直接通过路径名字符串(绝对路径或相对路径)创建 File 对象。路径可以是文件或目录。
// 示例1:使用绝对路径
File file1 = new File("C:/Users/Test/example.txt");
System.out.println(file1.getPath());
// 输出: C:\Users\Test\example.txt
// 示例2:使用相对路径(相对于当前项目根目录)
File file2 = new File("data/config.json");
System.out.println(file2.getPath());
// 输出: data\config.json
[*] new File(File parent, String child) :使用一个已有的 File 对象表示父路径,再拼接子路径。比字符串拼接更灵活,制止路径分隔符错误。
// 示例1:基于父目录对象创建子文件
File parentDir = new File("C:/Users/Test");
File childFile = new File(parentDir, "logs/app.log");
System.out.println(childFile.getPath()); // 输出: C:\Users\Test\logs\app.log
// 示例2:链式拼接目录
File baseDir = new File("projects");
File srcDir = new File(baseDir, "src");
File mainFile = new File(srcDir, "Main.java");
System.out.println(mainFile.getPath()); // 输出: projects\src\Main.java
[*] new File(URI rui) :通过 URI(统一资源标识符) 创建 File 对象。URI 格式需符合 file: 协议(如 file:/C:/test/data.txt)。
import java.net.URI;
// 示例1:使用URI创建File对象
try {
URI uri = new URI("file:/C:/Users/Test/example.txt");
File file = new File(uri);
System.out.println(file.getPath());
// 输出: C:\Users\Test\example.txt
} catch (Exception e) {
e.printStackTrace();
}
// 示例2:处理空格和特殊字符
//URI 中的特殊字符(如空格)需用 %20 表示,构造方法会解码后转换为实际路径。
URI uri2 = URI.create("file:/C:/My%20Documents/report.pdf");
File file2 = new File(uri2);
System.out.println(file2.getPath());
// 输出: C:\My Documents\report.pdf
总结对比
构造方法典范使用场景长处File(String pathname)直接指定完备路径简朴直接,适合已知路径File(String parent, String child)动态拼接父路径和子路径制止手动处置处罚路径分隔符File(File parent, String child)基于已有的 File 对象构建子路径支持链式操作,路径更安全File(URI uri)从 URI 格式创建(如编码后的路径)自动处置处罚特殊字符和协议 留意 :File 对象只是一个路径的抽象:创建 File 类对象,并不会真的在我们电脑上对应的目录下面创建文件,假如需要实际的创建文件需要显式的调用。
[*]构造 File 对象(如 new File("a.txt"))不会自动创建物理文件,仅表示路径。
[*]必须通过显式调用 createNewFile() 或其他写入操作(如 FileOutputStream 写入数据)才能实际天生文件。
2 createNewFile() 的作用
[*] 功能:
[*]显式创建一个空的文件(仅当文件不存在时)。
[*]假如文件已存在,则返回 false,不会覆盖原有内容。
[*] 语法:
File file = new File("example.txt");
boolean isCreated = file.createNewFile(); // 返回 true 表示创建成功
[*]留意事项:
[*] 需要处置处罚 IOException:
[*] 假如父目录不存在或没有写入权限,会抛出异常。
[*] 必须用 try-catch 包裹或声明 throws。
import java.io.File;
import java.io.IOException;
public class CreateFileDemo {
public static void main(String[] args) {
File file = new File("test.txt");
try {
if (file.createNewFile()) {
System.out.println("文件创建成功");
} else {
System.out.println("文件已存在");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
[*] 父目录必须存在:
[*] 假如路径中的父目录不存在,createNewFile() 会失败。
[*] 需先调用 file.getParentFile().mkdirs() 创建父目录:
File file = new File("nonexistent_dir/data.txt");
//File 对象仅表示路径,不检查文件是否存在!需通过 exists() 方法验证。
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs(); // 创建所有缺失的父目录
}
file.createNewFile();
3 获取文件相关信息的常用方法
[*]getName()
[*]作用:返回文件或目录的名称(不包含路径)。
[*]示例:路径为C:/test/file.txt时,返回file.txt;若为目录C:/test,返回test。
[*]getAbsolutePath()
[*]作用:返回文件或目录的绝对路径字符串。
[*]留意:无论File对象是相对路径还是绝对路径创建,均剖析为完备路径。例如,相对路径file.txt大概返回/home/user/file.txt。
[*]getParent()
[*]作用:返回父目录的路径(字符串情势)。若无父目录(如根目录或单文件相对路径),则返回null。
[*]示例:路径为C:/test/file.txt时,返回C:/test;路径为file.txt时,返回null。
[*]length()
[*]作用:返回文件的字节大小。若文件不存在或为目录,通常返回0L。
[*]留意:需先通过exists()和isFile()验证目标是否为有用文件。
[*]exists()
[*]作用:查抄文件或目录是否存在,返回布尔值。
[*]留意:大概受权限限制影响(如无访问权限时返回false)。
[*]isFile()
[*]作用:判断是否为标准文件(非目录或符号链接),返回布尔值。
[*]留意:若路径不存在,返回false。
[*]isDirectory()
[*]作用:判断是否为目录,返回布尔值。
[*]留意:若路径不存在,返回false。
import java.io.File;
import java.io.IOException;
public class Example {
public static void main(String[] args) {
read();
}
public static void read() {
//1.getName()
//路径指向文件
File file1 = new File("D:/0.学习/File_Test/read.txt");
System.out.println(file1.getName());// 输出 read.txt
//路径为目录
File file2 = new File("D:/0.学习/File_Test");
System.out.println(file2.getName());// 输出 File_Test
//2.getAbsolutePath()
//以绝对路径创建 File 对象
File file3 = new File("D:/0.学习/File_Test/read3.txt");
//输出 D:/0.学习/File_Test/read3.txt
System.out.println(file3.getAbsolutePath());
//以相对路径创建 File 对象
File file4 = new File("read4.txt");
//输出绝对路径 D:\0.学习\java笔记\java_Code\TankGame\read4.txt
System.out.println(file4.getAbsolutePath());
//3.getParent()
//File file3 = new File("D:/0.学习/File_Test/read3.txt");
//输出 D:\0.学习\File_Test
System.out.println(file3.getParent());
//根目录或单文件相对路径,返回 null
File file5 = new File("D:");
System.out.println(file5.getParent());//null
//4.length()
File file6 = new File("D:/0.学习/File_Test/read6.txt");
System.out.println(file6.length());
try {
file6.createNewFile();
} catch (IOException e) {
throw new RuntimeException(e);
}
System.out.println(file6.length());
}
}
4 目录的操作和文件的删除
1. mkdir()
[*]作用 :创建单层目录(仅当父目录存在时才能成功)。
[*]返回值 :boolean:目录创建成功返回 true,失败返回 false。
[*]适用场景 :当明确知道父目录已经存在时,直接创建子目录。
2. mkdirs()
[*]作用 :创建多层目录(自动创建路径中全部不存在的父目录)。
[*]返回值 :boolean:全部目录创建成功返回 true,失败返回 false。
[*]适用场景 :不确定父目录是否存在时,直接创建完备路径。
3. delete()
[*]作用 :删除文件或空目录(非空目录无法删除)。
[*]返回值 :boolean:删除成功返回 true,失败返回 false。
[*]适用场景 :删除文件或空目录。
import java.io.File;
import java.io.IOException;
public class Example {
public static void main(String[] args) {
dir();
}
public static void dir() {
//1.mkdir() 创建单层目录
File file1 = new File("D:/0.学习/File_Test/demo1");
//要求父目录必须存在,否则无法创建成功
//即,D:/0.学习/File_Test 必须存在才能成功创建 demo1 目录
boolean mkdir = file1.mkdir();
if(mkdir) {
System.out.println("创建成功");
} else {
System.out.println("创建失败");
}
//2.mkdirs() 创建多层目录
File file2 = new File("D:/0.学习/File_Test/demo2");
//如果路径中有不存在的自动创建
boolean mkdirs = file2.mkdirs();
//3.delete() 删除文件或空目录(非空目录无法删除)
//删除 demo2 空目录
boolean delete = file2.delete();
File file3 = new File("D:/0.学习/File_Test/demo1/dir.txt");
try {
file3.createNewFile();
} catch (IOException e) {
throw new RuntimeException(e);
}
//删除 dir.txt 文件
file3.delete();
}
}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]