使用DirectoryChooser

时间:2018-06-14 20:21:14

标签: java javafx directory docx xwpf

我正在使用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();

请帮我弄清楚我做错了什么:(

1 个答案:

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