2015-08-25 25 views
7
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(); 
} 

Çince karakterleri dosya adına işleyen bir yazar oluşturmaya çalışıyorum. Böylece örneğin 你好.txt adlı bir dosya oluşturabilirim.Çince karakterleri bir dosya adına yazamazsınız

Ancak, yukarıdaki kodla birlikte bir FileNotFoundException olsun, İngilizce karakterler için mükemmel bir şekilde çalışıyor ancak Çince karakterlerle çalışmıyor.

Yukarıdaki kodları üretmek için şu sorulara cevapları takip ettim: How to write a UTF-8 file with Java?, ancak bu kod çalışmıyor.

Bunu nasıl başarabilirim bilen var mı?

Yığın İzleme:

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: NIO kullanarak

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) 

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) 
+1

Bunun OS'ye bağlı olduğuna inanıyorum. İşletim sistemi, dosya adları olarak hangi dizeleri izin verilebileceğini denetler. Hangi işletim sistemini kullanıyorsunuz? Not; İşletim sistemi, baytların dosya verisinde ne olduğunu özellikle önemsemiyor; Bu dosyaları okuyan uygulamalara kalmış. Bu yüzden takip etmeye çalıştığınız bağlantı size yardımcı olmaz. – ajb

+0

Lütfen stackTrace'i sağlayabilir misiniz? –

+0

@TAsk İstiflenmiş yığın izi ve hangi satırın atıldığı belirtilir – Aequitas

cevap

5

Bu sorun Tutulma konsolun karakter kodlaması ile ilgili ve öğrendim Java ile ilgili değil.

Ben, aynı kodu kullanılmış ve aşağıda gösterildiği gibi farklı Run Configuration kullandık Şimdi programı çalıştırdıktan sonra benim konsolunda çıkışı aşağıdaki var

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) 

Sonuç:adresinde ISO-8859-1 kodlaması çalıştırılıyor Konsolun farklı karakter kodlaması olduğundan ve filename olarak ??'a sahip olacağınız için, 210 bu karakteri konsoldan düzgün bir şekilde okuyamayacaktır.

Konsolunuz için karakter kodlamasını değiştirin, bazı IDE kullandığınızı kesinlikle inanıyorum. Değişmiş olabilirsiniz veya konsolunuz karakter kodlamasını kalıtımla karakterize eder, bu karakterleri kodlamak için kullanılmaz.

+0

ISO8859 olarak değiştirildi ve hala çalışmıyor – Aequitas

+1

Oh Ne demek istediğimi yanlış anlamışım, Cp1252 aslında benim sahip olduğum şey ve bunu UTF-8 düzeltmeleriyle değiştiriyor – Aequitas

+1

@TAsk Çok güzel yakalama! – chrylis

İlgili konular