Sio*_*733 8 java linux windows tomcat
我有以下代码从文件中读取:
private static void writeLogs(String filePath, PrintWriter writer)throws ServletException, IOException {
String fullFilePath = AppConfig.getAppDir()+"/auditlogs/"+filePath+".log";
System.out.println("loading log files from --> "+fullFilePath);
BufferedReader br = new BufferedReader(new FileReader(fullFilePath));
try {
StringBuilder sb = new StringBuilder();
String line;
List<String> tmp = new ArrayList<String>();
do {
line = br.readLine();
tmp.add(line);
}while (line != null);
for(int i=tmp.size()-1;i>=0;i--) {
if(tmp.get(i)!=null){
sb.append(tmp.get(i));
sb.append(System.lineSeparator());
}
}
String logs = sb.toString();
writer.write(logs);
} finally {
br.close();
}
}
Run Code Online (Sandbox Code Playgroud)
当我在Windows上的tomcat服务器上部署时,这可以正常工作.当我在linux上尝试相同时,文件不会被读取.在检查tomcat日志文件时,我看到:
SEVERE: Servlet.service() for servlet ReadLogsServlet threw exception
java.lang.NoSuchMethodError: java.lang.System.lineSeparator()Ljava/lang/String;
at com.ericsson.ims.web.servlet.ReadLogsServlet.writeLogs(ReadLogsServlet.java:53)
at com.ericsson.ims.web.servlet.ReadLogsServlet.doGet(ReadLogsServlet.java:26)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
Run Code Online (Sandbox Code Playgroud)
发生错误的原因是,System.lineSeparator()
但是当我检查javadoc时,它说:
返回依赖于系统的行分隔符字符串.它始终返回相同的值 - 系统属性line.separator的初始值.
在UNIX系统上,它返回"\n"; 在Microsoft Windows系统上,它返回"\ r \n".
任何人都可以解释为什么这不起作用以及如何修复,以便它可以在多个平台上工作?
Flo*_*yle 11
您似乎没有在Linux和Windows之间使用相同版本的Java.
正如你可以看到在javadoc中,System.lineSeparator()
不存在于Java的<7.
所以,如果你想在java <7上获得行分隔符,你必须使用:
System.getProperty("line.separator")
Run Code Online (Sandbox Code Playgroud)