gpt4 book ai didi

java - 无法将中文字符写入文件名

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:22 28 4
gpt4 key购买 nike

public static void main(String[] args) throws IOException
{
Scanner in = new Scanner(System.in);
String fileName = in.nextLine();

Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream("C:/temp/"+fileName+".txt"), "UTF-8"));//Ex thrown
out.close();
}

我正在尝试创建一个可以将中文字符处理为文件名的编写器。例如,我可以创建一个名为 你好.txt 的文件。

但是我用上面的代码得到了一个FileNotFoundException,它对英文字符工作得很好,但对中文字符就不行。

我按照这里的答案:How to write a UTF-8 file with Java?生成上述代码,但它不起作用。

有人知道我该怎么做吗?

堆栈跟踪:

Exception in thread "main" java.io.FileNotFoundException: C:\temp\??.txt (The filename, directory name, or volume label syntax is incorrect)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)
at java.io.FileOutputStream.<init>(Unknown Source)

使用 NIO:

Path path = Paths.get("C:/temp/"+fileName+".txt");//throws ex
Charset charset = Charset.forName("UTF-8");
Path file = Files.createFile(path);
BufferedWriter bufferedWriter = Files.newBufferedWriter(file, charset);
bufferedWriter.close();

堆栈:

Exception in thread "main" java.nio.file.InvalidPathException: Illegal char <?> at index 8: C:/temp/?.txt
at sun.nio.fs.WindowsPathParser.normalize(Unknown Source)
at sun.nio.fs.WindowsPathParser.parse(Unknown Source)
at sun.nio.fs.WindowsPathParser.parse(Unknown Source)
at sun.nio.fs.WindowsPath.parse(Unknown Source)
at sun.nio.fs.WindowsFileSystem.getPath(Unknown Source)
at java.nio.file.Paths.get(Unknown Source)

最佳答案

我发现这个问题与eclipse控制台的字符编码有关,与Java无关。

我使用了相同的代码并以不同的方式使用了Run Configuration,如下所示,

enter image description here

现在运行程序后,我在控制台中得到以下输出,

Exception in thread "main" java.io.FileNotFoundException: C:\temp\??.txt (The filename, directory name, or volume label syntax is incorrect)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:206)
at java.io.FileOutputStream.<init>(FileOutputStream.java:95)
at Test.main(Test.java:21)

结论:这里对于ISO-8859-1编码在运行配置Scanner将无法从控制台正确读取这些字符,因为控制台具有不同的字符编码,您将有 ?? 作为 filename

请为您的控制台更改字符编码,我坚信您正在使用某些 IDE。可能是您已更改或您的控制台继承了不应该对这些字符进行编码的字符编码。

关于java - 无法将中文字符写入文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32195708/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com