从包含德语变音符号的绝对路径创建文件

Creating a file from a absolute path, which is containing a german umlaut

提问人:HansJuergen 提问时间:11/8/2023 最后编辑:HansJuergen 更新时间:11/11/2023 访问量:72

问:

我在从包含德语变音符号的绝对路径创建文件时遇到问题。(在 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 并调整了路径变量。 然后它完美地工作。所以问题出在变音符号上.我该如何解决这个问题?Ü

Java 文件 UTF-8 JAVA-11

评论

0赞 cyberbrain 11/8/2023
您使用哪种文件系统?文件是否在命令提示符下正确显示?当你做一个 ?dirnew File("C:/Users/MyUser/Desktop/MeinOrdner").list()
0赞 Ada 11/8/2023
这回答了你的问题吗?java.io.File:访问文件名编码无效的文件
0赞 HansJuergen 11/8/2023
@cyberbrain我在Windows上工作。该文件在命令 pompt 中正确显示。 返回 [Z_ berdenken]dir.list()
0赞 user85421 11/8/2023
顺便说一句,它不会创建文件 - 它只是一个路径;并将返回一个不存在的文件(javadoc of : “An abstract representation of file and directory pathnames.” - 强调后加)new File(path)File#isFilefalseFile
1赞 Holger 11/9/2023
您是如何验证返回的?打印到控制台本身可能会产生有损转换。.list()

答:

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 的构造函数之一,就会实例化一个对象,但不会在磁盘上创建物理文件。Filefinal File myPathFile = new File(path)File
  • 我不认为在目录名称中使用变音符号是相关的。至少这对我来说不是问题。但重要的是你试图创建的是否已经存在,所以在你的代码中允许这一点。File
  • 我的环境是 Windows 10 上的 JDK 11,使用语言环境英语(美国)。
  • 我不需要配置任何与我的语言环境、UTF-8 或编码相关的内容,也没有提供任何编译器或运行时选项。使用默认设置一切正常。
  • 我注意到一篇标题为“如何在 Java 中使用变音符号保存文本文件”的文章,这可能会引起人们的兴趣。它与您的问题没有直接关系,因为它与文件的内容而不是它的名称相关,但它确实提供了一种完全不同的方法,用于在不使用类的情况下创建文件。File