我在D:\XML
equestXML中有一个xml文件,并且正在从FileReader中读取此文件夹中的xml文件。 在我的程序中,我对文件路径/XML/RequestXML/进行了硬编码。 在windows环境下可以正常工作。 在Windows中,JBoss在D:\jbossdistrib\jboss中。
我在linux /usr/XML/RequestXML/中创建了文件夹结构。 并将xml添加到RequestXML文件夹中。 JBoss在/usr/jbossdistrib/jboss/路径中。
但是我的应用程序找不到在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
equestXML的文件夹结构。
如果文件位于usrXMLRequestXML中,并且您试图从XMLRequestXML读取文件,则显然不会找到该文件,因为这两个位置不相同...为什么要对路径进行硬编码?
如果路径不同,则无法对两个系统进行硬编码。
我不要两条路。 我在说如果我使用/ XML / RequetXML /路径。 这在Linux中不起作用。 Linux希望/ usr / XML / RequestXML /路径起作用。 我只希望在Linux和Windows中都可以使用的一条路径。 我怎样才能做到这一点?
发布您尝试过的相关代码将帮助我们提供确切方案的解决方案
您要么需要两个系统的路径都相同,要么需要告诉您代码正在运行另一个系统。 同样在XMLRequestXML中,是根目录,您在这里可能还有另一个问题。
如果您知道当前的工作目录(请使用以下命令进行测试:
System.out.println(new File(".").getAbsolutePath());
您可以硬编码相对目录,例如../../XML/RequestXML
记录:尽管这可能有所帮助,但我仍然相信您应该尝试使用配置参数或通过将其作为类路径中可用的资源加载来解决此问题。
首先有个坏消息: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还定义了几件事。但这是不可移植的。
没有这个文件夹中可以有许多供用户选择并提交的xml文件。所以我不能把它们放在战争或耳朵里。用户也会不时更改xml值。
由于Linux可以具有软链接(link -s),因此您可以在Linux中自由定义一些通用路径。
I don't want two paths
好的,然后将文件放在应用程序的资源文件夹中,并尝试以这种方式读取
private String filePath = className.getClass()
.getResource("yourFileName").getPath();
BufferedReader reader = new BufferedReader(new FileReader(filePath));
即使我在资源文件中使用它,上传到linux时我仍然必须对其进行更改。因为linux路径从/ usr /开始,但是在Windows中没有这样的东西。它使用D驱动器的相对路径。
为什么地球上我无法编辑我的答案?
不建议对文件路径进行硬编码。您可能会找到一种以编程方式构建文件路径并使用File.separator的方法,该方法会根据系统返回正确的文件路径(对于Windows,"";对于UNIX / Linux / Macintosh," /")。
Java不一定会解决这个问题,并且在Windows上使用可以完美地工作。
由于文件系统的根本差异,因此解决此问题并不容易。 (编辑:忽略我,我显然在服用止咳药。正如Djon在下面指出的那样)。
Windows Uses Folder Structures Like This.txt
Linux /用途/文件夹/结构/类似/This.txt
因此,相应地处理此问题的唯一方法是先检测其运行的操作系统,然后相应地构建文件路径。
有关更多详细信息,请参见此问题:
如何以编程方式确定Java的操作系统?
好吧,该死的。每当我做类似的事情时,总是会遇到问题。只需在资源管理器,命令提示符和一个小的脚本中进行尝试,它就可以工作。多杰!
是的,这不是关于/这是关于/ usr /文件夹的问题。如何相对读取文件。在Windows中,路径从D驱动器开始。但是在linux中,它另外需要/ usr /。我的问题是如何解决这个问题。
嗯,我当时在谈论Java,但是我也对其进行了测试,实际上您是对的,因此我今天学到了一些东西...