2012-01-10 3 views
1

次のコードは、javaアプリケーション内の指定されたファイルにデータを追加します。しかし、このコードをサーブレットに入れると、ファイルは空になります。なぜこれ?サーブレットで追加されるファイル

try {    
    OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("C:\\root.properties", true), "UTF-8"); 
    BufferedWriter fbw = new BufferedWriter(writer); 
    String s = "root.label.1130.2=قسيمات";  
    fbw.write(new String(s.getBytes("iso-8859-1"), "UTF-8")); 
    fbw.newLine(); 
    fbw.close(); 
} catch (Exception e) { 
    System.out.println("Error: " + e.getMessage()); 
} 

答えて

1

例外が発生する可能性はありますか?おそらくサーブレットにファイルへの書き込み権限がありません。私はあなたのプログラムをデバッグして、このコードが実行されたときに何が起こるのかを調べようとします。


あなたは意志破損した文字の多くのやっている

、あなたはまだファイルを取得する必要があります。

私はこのコードを実行すると、私はあなたが得ることを期待するものです

root.label.1130.2=?????? 

でファイルを取得します。

私はこのコードを実行した場合

PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("root.properties", true), "UTF-8")); 
String s = "root.label.1130.2=قسيمات"; 
pw.println(s); 
pw.close(); 

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("root.properties"), "UTF-8")); 
String line; 
while ((line = br.readLine()) != null) { 
    for (int i = 0; i < line.length(); i++) { 
     char ch = line.charAt(i); 
     if (ch >= ' ' && ch < 127) 
      System.out.print(ch); 
     else 
      System.out.printf("\\u%04x", (int) ch); 
    } 
    System.out.println(); 
} 

は、アラビア語の文字が台無しにされていないことを示す、次のように出力します。

root.label.1130.2=\u0642\u0633\u064a\u0645\u0627\u062a 

ファイル予想通り、今

root.label.1130.2=قسيمات 

が含まれています。

+0

スニペットをコピーアンドペーストした後に疑問符がサーブレットソースコードファイルに存在しないことを確認してください。 – mgaert

+1

@Peter Lawrey:新しいファイルを作成すると正しい出力が得られます。しかし、追加する間には、書面やエンコーディングに問題があります。 – 1355

+0

@ 1355あなたのエンコーディングがどのように機能するかはわかりません。私が提案したコードを試しましたか?これは(私が示したように)追加するときに機能します –

2

文字列に等号の後にISO-8859-1以外の文字が含まれています。 JavaコンパイルがUTF-8入力を受け入れること、つまりjavac -encoding UTF-8を確認することができます。また、getBytes()の「iso-8859-1」を「UTF-8」に置き換えてください。

いいえ書込みと定数ストリングをエンコードする他の方法については、http://illegalargumentexception.blogspot.com/2009/05/java-rough-guide-to-character-encoding.html#javaencoding_sourcefilesを参照してください。

+0

@magaert:新しいファイルを作成すると正しい出力が得られます。しかし、追加する間には、書面やエンコーディングに問題があります。 – 1355

+0

ああ、それは少し質問に焦点を当てています。また、Javaプロパティは通常ISO-8859-1(文字の引用符付き)であることにご注意ください。あなたはUTF-8プロパティファイルを読むことができますか? http://stackoverflow.com/a/3040771/1037626 – mgaert

+0

はいを​​参照してください。私もその機能を持っています。それは適切に動作します。 – 1355

関連する問題