我正在使用Apache库来编辑DOCX文件,我希望用户选择dir在哪里保存他的文件。无论选择哪个文件夹都无关紧要,并且说“路径(访问被拒绝)”,然而,如果我在我的代码中选择目录它完美无缺。这是我的一些代码:
XWPFDocument doc = null;
try {
doc = new XWPFDocument(new ByteArrayInputStream(byteData));
} catch (IOException e) {
e.printStackTrace();
}
/* editing docx file somehow (a lot of useless code) */
Alert alert = new Alert(Alert.AlertType.INFORMATION);
DirectoryChooser dirChooser = new DirectoryChooser();
dirChooser.setTitle("Choose folder");
Stage stage = (Stage) (((Node) event.getSource()).getScene().getWindow());
File file = dirChooser.showDialog(stage);
if (file != null) {
try {
doc.write(new FileOutputStream(file.getAbsoluteFile()));
alert.setContentText("Saved to folder " + file.getAbsolutePath());
} catch (IOException e) {
alert.setContentText(e.getLocalizedMessage());
}
} else {
try {
doc.write(new FileOutputStream("C://output.docx"));
alert.setContentText("Saved to folder C:\\");
} catch (IOException e) {
alert.setContentText(e.getLocalizedMessage());
}
}
alert.showAndWait();
请帮我弄清楚我做错了什么:(
答案 0 :(得分:2)
DirectoryChooser返回一个File
对象,该对象是目录或null(如果您没有通过按取消或退出对话框选择一个)。因此,为了保存文件,您还需要将文件名附加到所选目录的绝对路径中。你可以通过以下方式做到:
doc.write(new FileOutputStream(file.getAbsoluteFile()+"\\doc.docx"));
但这是Windows依赖于平台的原因,它是'\'而unix则是'/',所以最好使用File.separator
,如:
doc.write(new FileOutputStream(file.getAbsoluteFile()+File.separator+"doc.docx"));
您可以阅读有关上述here
的更多信息 编辑:正如Fabian在下面的评论中提到的,你可以使用File
构造函数,传递文件夹(你从它们获取的文件DirectoryChooser)和新文件名作为参数使代码更具可读性:
new FileOutputStream(new File(file, "doc.docx"))