gpt4 book ai didi

java - 使用 DirectoryChooser 保存文件时访问被拒绝

转载 作者:行者123 更新时间:2023-11-30 02:08:17 25 4
gpt4 key购买 nike

我正在使用 Apache 库来编辑 DOCX 文件,我希望用户选择保存文件的目录。无论选择哪个文件夹,它总是会出现异常并显示“路径(访问被拒绝)”,但是,如果我在代码中选择目录,它就会完美运行。这是我的一些代码:

        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();

请帮我找出我做错了什么:(

最佳答案

DirectoryChooser 返回一个 File 对象,该对象可以是目录,也可以是空对象(如果您没有通过按“取消”或退出对话框来选择一个对象)。因此,为了保存文件,您还需要将文件名附加到您选择的目录的绝对路径中。您可以通过以下方式做到这一点:

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"))

关于java - 使用 DirectoryChooser 保存文件时访问被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50865333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com