从java中读取windows和linux中的文件

我有一个位于D:\XML\RequestXML xml文件,我正在从FileReader读取此文件夹中的xml文件。 在我的程序中,我硬编码了文件路径/XML/RequestXML/ 。 这适用于windows环境。 在Windows中, JBoss位于D:\jbossdistrib\jboss

我在linux /usr/XML/RequestXML/创建了文件夹结构。 并将xml添加到RequestXML文件夹中。 JBoss位于/usr/jbossdistrib/jboss/ path中。

但我的应用程序找不到在linux环境中的/ XML / RequestXML /中指定的文件。

如果我将文件路径更改为/usr/XML/RequestXML/它在linux中工作。

如何在linux和windows中使用一致的文件路径?

 public class Controller extends HttpServlet { private String filePath = "/XML/RequestXML/"; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String file = request.getParameter("fileName"); xml = readFile(filePath + file); } private String readFile(String file) { StringBuffer fileData = new StringBuffer(); try { BufferedReader reader = new BufferedReader(new FileReader(file)); char[] buf = new char[1024]; int numRead=0; while((numRead=reader.read(buf)) != -1){ String readData = String.valueOf(buf, 0, numRead); fileData.append(readData); buf = new char[1024]; } reader.close(); } catch (FileNotFoundException e) { logger.fatal("File not found in specifid path "+ file); } catch (IOException e) { logger.fatal("Error while reading the xml file"); } return fileData.toString(); } } 

更新

我的问题是如何设置文件路径没有/usr/在Windows中正常工作。 如果这是不可能的,那么我是否还需要在windows环境中将路径用作/usr/XML/RequestXML/ ? 所以我必须在Windows中创建一个像D:\usr\XML\RequestXML这样的文件夹结构。

I don't want two paths

确定然后将您的文件放在应用程序的resources文件夹中,并尝试以这种方式阅读

 private String filePath = className.getClass() .getResource("yourFileName").getPath(); BufferedReader reader = new BufferedReader(new FileReader(filePath)); 

首先是一个坏消息:FileReader是一个实用程序类,默认使用平台编码: 非可移植 。 由于编码是在XML源本身中定义的,因此如果可能,您可以保留到InputStream。

您可以将XML保留为war / ear中的只读资源。

或者作为应用程序外部的jboss目录中的只读资源。 通过jboss的系统ClassLoader用作java资源。

或者作为文件,路径配置如上。 可能在现有的properties / xml配置文件中。 您还可以使用jboss管理控制台配置路径。

也许有兴趣:

 System.getProperty("file.encoding"); // The default encoding System.getProperty("user.name"); // Under which user are we running System.getProperty("user.home"); // The user's home System.getProperty("user.dir"); // The applications working dir 

JBoss还定义了一些东西; 但那将是不便携的。

如果你知道当前的工作目录(测试它:

 System.out.println(new File(".").getAbsolutePath()); 

你可以硬编码像../../XML/RequestXML这样的相对目录

对于记录:尽管这可能会有所帮助,但我仍然相信您应该尝试使用配置参数解决此问题,或者将其作为类路径中可用的资源加载。

建议不要使用硬编码文件路径。 您可以找到一种以编程方式构建文件路径的方法,并使用File.separator,它根据系统返回正确的路径(Windows为“\”,UNIX / Linux / Macintosh为“/”)。

由于文件系统的根本区别,问题不容易解决。 ( 编辑:忽略我,我明显在咳嗽医学上。正如Djon在下面指出的那样 )。

WINDOWS \使用\文件夹\结构\像\ This.txt

Linux的/用途/文件夹/结构/顶/ This.txt

因此,相应处理此问题的唯一方法是首先检测它运行的操作系统,然后相应地构建文件路径。

有关详细信息,请参阅此问题:

如何以编程方式确定Java中的操作系统?