2012-01-10 2 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. Также замените «iso-8859-1» на «UTF-8» в getBytes().

См. 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

Смежные вопросы