以下是我想做的事情:
在Windows 7中一切正常,但是当我在Ubuntu中运行应用程序时它不会创建文件夹,它只是创建文件夹名称的文件,例如:(我的文件名是xxx.xml和文件夹是d:\ temp,所以在Ubuntu中,文件是在d:生成的,名称为temp \ xxx.xml)。这是我的代码:
File folder = new File("D:\\temp");
if (folder.exists() && folder.isDirectory()) {
} else {
folder.mkdir();
}
String filePath = folder + File.separator;
File file = new File(filePath + "xxx.xml");
StreamResult result = new StreamResult(file);
transformer.transform(source, result);
// more code here
答案 0 :(得分:2)
您的目录(D:\ temp)在Linux上是不合适的。
请考虑使用linux文件系统和File.SEPARATOR常量:
static String OS = System.getProperty("OS.name").toLowerCase();
String root = "/tmp";
if (OS.indexOf("win") >= 0) {
root="D:\\temp";
} else {
root="/";
}
File folder = new File(ROOT + "dir1" + File.SEPARATOR + "dir2");
if (folder.exists() && folder.isDirectory()) {
} else {
folder.mkdir();
}
没试过,但是可以工作。
答案 1 :(得分:1)
D:\temp
(我的意思是它将其解释为就像任何其他的foldername一样)
在Linux系统中,文件分隔符为/
,而不是\
,就像Windows一样
因此解决方案是:
File folder = new File("/tmp");
而不是
File folder = new File("D:\\temp");
答案 2 :(得分:1)
Linux不使用驱动器号(如D :),并使用正斜杠作为文件分隔符。
您可以这样做:
File folder = new File("/path/name/of/the/folder");
folder.mkdirs(); // this will also create parent directories if necessary
File file = new File(folder, "filename");
StreamResult result = new StreamResult(file);
答案 3 :(得分:0)
在类Unix系统上没有逻辑光盘。您可以尝试在/tmp
或/home
上创建
下面是您主目录中创建temp
目录的代码:
String myPathCandidate = System.getProperty("os.name").equals("Linux")? System.getProperty("user.home"):"D:\\";
System.out.println(myPathCandidate);
//Check write permissions
File folder = new File(myPathCandidate);
if (folder.exists() && folder.isDirectory() && folder.canWrite()) {
System.out.println("Create directory here");
} else {System.out.println("Wrong path");}
或者,对于/tmp
- 系统临时dicecrory。大多数用户可以在这里写:
String myPathCandidate = System.getProperty("os.name").equals("Linux")? System.getProperty("java.io.tmpdir"):"D:\\";
答案 4 :(得分:0)
在Java 7之前,File API可以利用操作系统配置(如RAM磁盘上的临时文件)创建临时文件。由于Java 7使用实用程序函数类Files。
答案 5 :(得分:0)
使用System类的getProperty静态方法考虑两种解决方案。
String os = System.getProperty("os.name");
if(os.indexOf("nix") >= 0 || os.indexOf("nux") >= 0 || os.indexOf("aix") > 0 ) // Unix
File folder = new File("/home/tmp");
else if(os.indexOf("win") >= 0) // Windows
File folder = new File("D:\\temp");
else
throw Exception("your message");
答案 6 :(得分:0)
从Java 7开始,您可以使用Files实用程序类和新的Path类。 请注意,以下示例中省略了异常处理。
// uses os separator for path/to/folder.
Path file = Paths.get("path","to","file");
// this creates directories in case they don't exist
Files.createDirectories(file.getParent());
if (!Files.exists(file)) {
Files.createFile(file);
}
StreamResult result = new StreamResult(file.toFile());
transformer.transform(source, result);
这涵盖了一般情况,如果它不存在则创建一个文件夹,并在该文件夹上创建一个文件。
如果你真的想要创建一个临时文件,如你的例子所示,那么你只需要执行以下操作:
// this create a temporary file on the system's default temp folder.
Path tempFile = Files.createTempFile("xxx", "xml");
StreamResult result = new StreamResult(Files.newOutputStream(file, CREATE, APPEND, DELETE_ON_CLOSE));
transformer.transform(source, result);
请注意,使用此方法时,文件名与您使用的前缀不完全对应(xxx
,在本例中)。
尽管如此,鉴于它是一个临时文件,这根本不重要。 DELETE_ON_CLOSE保证在关闭时文件将被删除。