提问人:HansJuergen 提问时间:11/8/2023 最后编辑:HansJuergen 更新时间:11/11/2023 访问量:72
从包含德语变音符号的绝对路径创建文件
Creating a file from a absolute path, which is containing a german umlaut
问:
我在从包含德语变音符号的绝对路径创建文件时遇到问题。(在 Windows 上工作) 下面是一个示例代码:
public void createFile(String path) {
System.out.println("Path: " + path);
final File myPathFile = new File(path)
if(!myPathFile.isFile()){
System.out.println("No file");
}
记录结果:
Path: C:\Users\MyUser\Desktop\MeinOrdner\Z_Überdenken\check.txt
No file
我尝试将文件夹重命名为 Z_Ueberdenken 并调整了路径变量。
然后它完美地工作。所以问题出在变音符号上.我该如何解决这个问题?Ü
答:
0赞
skomisa
11/11/2023
#1
首先,课程的一些基础知识:java.io.File
- 要创建目录,请使用方法 。
mkdir()
- 要创建文件,请使用方法 。
createNewFile()
- 要检查文件或目录是否已存在,请使用 方法 。
exists()
- 创建文件时,其父目录必须已存在。例如,如果创建文件 D:\Z_Überdenken\check.txt,则目录Z_Überdenken必须已存在;方法不会为您创建它。
createNewFile()
鉴于此,使用该类创建目录和文件是一个简单的过程。下面是一个工作示例:File
package umlaut;
import java.io.File;
import java.io.IOException;
public class Umlaut {
public static void main(String[] args) throws IOException {
String dirPath = "d:\\temp\\Z_Überdenken2"; // Directory name includes "Ü"
String filePath = dirPath + "\\test4.txt";
File dir = new File(dirPath);
if (!dir.exists()) { // Create parent directory for new files.
new Umlaut().createDir(dirPath);
}
if (dir.exists()) {
System.out.println("Is " + dirPath + " a file? " + dir.isFile());
System.out.println("Is " + dirPath + " a directory? " + dir.isDirectory());
new Umlaut().createFile(filePath);
} else {
System.out.println("Unable to create directory " + dirPath);
}
}
public boolean createDir(String path) throws IOException {
System.out.println("Directory to be created: " + path);
File myPathFile = new File(path);
return myPathFile.mkdir();
}
public void createFile(String path) throws IOException {
System.out.println("File to be created: " + path);
File myPathFile = new File(path);
if (myPathFile.exists()) {
System.out.println("Not creating " + myPathFile + " because it already exists.");
} else {
System.out.println("Creation of file " + myPathFile + (myPathFile.createNewFile() ? " successful." : " failed."));
}
System.out.println("Is " + path + " a file? " + myPathFile.isFile());
System.out.println("Is " + path + " a directory? " + myPathFile.isDirectory());
}
}
这是控制台输出:
Is d:\temp\Z_Überdenken2 a file? false
Is d:\temp\Z_Überdenken2 a directory? true
File to be created: d:\temp\Z_Überdenken2\test4.txt
Creation of file d:\temp\Z_Überdenken2\test4.txt successful.
Is d:\temp\Z_Überdenken2\test4.txt a file? true
Is d:\temp\Z_Überdenken2\test4.txt a directory? false
笔记:
- 问题中提供的代码没有执行任何操作来创建物理目录或文件。只需将路径传递给 using 的构造函数之一,就会实例化一个对象,但不会在磁盘上创建物理文件。
File
final File myPathFile = new File(path)
File
- 我不认为在目录名称中使用变音符号是相关的。至少这对我来说不是问题。但重要的是你试图创建的是否已经存在,所以在你的代码中允许这一点。
File
- 我的环境是 Windows 10 上的 JDK 11,使用语言环境英语(美国)。
- 我不需要配置任何与我的语言环境、UTF-8 或编码相关的内容,也没有提供任何编译器或运行时选项。使用默认设置一切正常。
- 我注意到一篇标题为“如何在 Java 中使用变音符号保存文本文件”的文章,这可能会引起人们的兴趣。它与您的问题没有直接关系,因为它与文件的内容而不是它的名称相关,但它确实提供了一种完全不同的方法,用于在不使用类的情况下创建文件。
File
评论
dir
new File("C:/Users/MyUser/Desktop/MeinOrdner").list()
dir
.list()
new File(path)
File#isFile
false
File
.list()