在Linux上部署时NoSuchMethodError

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)