Aeq*_*tas 7 java file internationalization
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();
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个可以处理中文字符到文件名的编写器.所以我可以创建一个名为??.txtexample 的文件.
但是我得到了FileNotFoundException 上面的代码,它对英文字符完全正常,但不适用于汉字.
我按照这里的答案:如何用Java编写UTF-8文件?生成上面的代码,但它不起作用.
任何人都知道如何实现这一目标?
堆栈跟踪:
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)
Run Code Online (Sandbox Code Playgroud)
使用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();
Run Code Online (Sandbox Code Playgroud)
堆:
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)
Run Code Online (Sandbox Code Playgroud)
我发现这个问题与eclipse控制台的字符编码有关,与之无关Java.
我使用了相同的代码,并使用Run Configuration 不同的方式,如下所示,
现在运行程序后,我在控制台中得到了以下输出,
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)
Run Code Online (Sandbox Code Playgroud)
结论:这里ISO-8859-1的运行配置编码Scanner将无法从控制台正确读取这些字符,因为控制台有不同的字符编码,你将有??作为filename.
请更改控制台的字符编码,我坚信你正在使用某些IDE.可能是您已更改或您的控制台继承了字符编码,而不是编码这些字符.
| 归档时间: |
|
| 查看次数: |
1459 次 |
| 最近记录: |