从Eclipse本地服务器和Google App Engine读取文本文件的结果不同

时间:2012-08-12 21:33:37

标签: google-app-engine gwt character-encoding bufferedreader

从GWT我读了一个文本文件“myFile.txt”,如下所示。问题是我在“输入”字符串中得到不同的结果,具体取决于服务器:

  • 如果我从Eclipse Indigo本地服务器(调试)运行,“输入”包括末尾字符“\ r”和“\ n”。
  • 如果我是从Google App Engine运行的,那么“输入”仅包含在结尾处的字符“\ n”,因此input.length中的字符数较少。

为什么会发生这种情况,我怎么能有相同的行为?

由于

String input=readFromFile("myFile.txt");

public String readFromFile(String fileName) {
  File file = new File(fileName);
  StringBuffer contents = new StringBuffer();
  BufferedReader reader = null;
  try {
    reader = new BufferedReader(new FileReader(file));
    String text = null;
    while ((text = reader.readLine()) != null) {
    contents.append(text).append(System.getProperty("line.separator"));
    }
  } catch (FileNotFoundException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  } finally {
    try {
      if (reader != null) {
        reader.close();
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  contents.deleteCharAt(contents.length()-2); // Remove to make it work in GAE
  contents.deleteCharAt(contents.length()-1);
  return contents.toString();
}

1 个答案:

答案 0 :(得分:1)

因为不同操作系统上的行分隔符不同。这就是System.getProperty("line.separator")的作用。

在Windows上它是\r\n\(两个字符),而在Linux上它是\n(一个字符)。 See here.