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();
}
Ich versuche, einen Schreiber zu erstellen, der chinesische Zeichen mit dem Dateinamen verarbeiten kann. So kann ich zum Beispiel eine Datei namens 你好.txt
erstellen.Kann keine chinesischen Zeichen in einen Dateinamen schreiben
Allerdings bekomme ich eine FileNotFoundException
mit dem obigen Code, es funktioniert perfekt für englische Zeichen, aber nicht mit chinesischen Schriftzeichen.
Ich folgte den Antworten hier: How to write a UTF-8 file with Java?, um den obigen Code zu erzeugen, aber es funktioniert nicht.
Wer weiß, wie kann ich das erreichen?
Stack Trace:
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)
Mit 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();
Stack:
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)
Ich glaube, das ist OS-abhängig. OS kontrolliert, welche Zeichenfolgen als Dateinamen zulässig sind. Welches Betriebssystem verwenden Sie? P.S. Betriebssysteme kümmern sich nicht besonders, welche Bytes in den Daten der Datei enthalten sind; Das hängt von den Apps ab, die die Dateien lesen. Deshalb hilft Ihnen der Link, dem Sie folgen wollten, nicht. – ajb
Können Sie bitte StackTrace bereitstellen? –
@TAsk Stack-Trace hinzugefügt und in sscce angezeigt, welche Zeile wirft es – Aequitas