文件附加在servlet中

时间:2012-01-10 10:18:11

标签: java file servlets append

以下代码将数据附加到java应用程序中的给定文件。但是当将此代码放在servlet中时,该文件将变为空。为什么这样?

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());
} 

2 个答案:

答案 0 :(得分: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以获得一个很好的文章和其他编码常量字符串的方法。

答案 1 :(得分:1)

你确定你看到任何可能抛出的异常吗?也许你的servlet没有写入文件的权限。我会尝试调试你的程序,看看运行这段代码会发生什么。


你正在做的事情会破坏很多角色,但你仍然应该得到一个文件。

当我运行此代码时,我得到一个带

的文件
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=قسيمات

正如所料。