从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中的操作系统?