应用程序数据文件系统的最佳实践JavaFX

时间:2016-03-18 23:00:54

标签: file javafx storage

我正在尝试建立一个库存管理系统,并且最近问了一个关于如何在我的src文件中将图像存储在包中的问题。有人告诉我,你不应该存储存储类文件的图像,但是没有告诉你文件系统的最佳实践。我创建了一个新页面,允许用户输入有关他们要添加到系统的新零件的所有数据,并上传与零件关联的图像。当他们保存时,一切正常,直到您尝试重新加载零件数据库。如果你刷新' eclipse然后更新数据库,一切都很好,因为你可以在刷新时看到图像弹出到包中。 (所有数据库信息也都正确更新。

我被告知不要存储这些类型的新品种。带有程序文件的图像,但要创建一个单独的文件系统来存储这些类型的图像。这些类型的文件系统是否有最佳实践?我的困惑是当程序被保存到将要保存的地方时,我无法指向一个绝对路径,因为它可能不会保存在C驱动器或K驱动器上而我不会想要一个只是坐在C盘上的图像文件夹,其中包含所有零件图像供任何人使用。请给我一些关于如何构建这些文件系统的好资源。我想要图像文件夹'打包'当我编译它并将所有文件打包在一起时,我无法找到任何关于此的好信息,谢谢!

1 个答案:

答案 0 :(得分:1)

要回答这个问题,可能不是最好的方式,但效果很好。

enter image description here

我最终创建了另一个menuItem和菜单,您可以在顶部看到图像管理',它允许用户设置他们想要保存所有图像的位置以及位置备份图像。如果目录不存在,它会创建目录,如果目录已经存在,它将保存在图像上。仅当用户具有管理员权限时,才会显示此菜单。我认为这可以通过安装向导进行设置,但我不知道如何创建一个安装向导,它只在安装时运行。如果已设置备份位置,我还将添加自动保存功能以保存到这两个位置。这是我能想到管理所有部分图像的最佳方式,如果有人有一些好的意见,请告诉我。我认为是服务器,但认为这个应用程序太多了,每次tableView填充时检索图像会花费很多时间。如果有兴趣我使用的代码是:

public class ImageDirectoryController实现Initializable {

@FXML private AnchorPane imageDirectory;
@FXML private Label imageDirLbl, backupLbl;
@FXML private Button setLocationButton, backupButton;
@FXML private TextField imageDirPathTxtField;

Stage window;
String image_directory;

@Override
public void initialize(URL location, ResourceBundle resources) {
    // TODO Auto-generated method stub

}

public void setImageDirectory(String image_address, String backup_address) {

    imageDirLbl.setText(image_address);
    backupLbl.setText(backup_address);

}

@FXML
public void setLocationButtonClicked () {

    String imagesPath = imageDirPathTxtField.getText() +  "tolmarImages\\";
    File files = new File(imagesPath + "asepticImages");
    File generalFiles = new File(imagesPath + "generalImages");
    File facilitiesFiles = new File(imagesPath + "facilitiesImages");

    boolean answer = ConfirmBox.display("Set Image", "Are you sure you want to set this location?");

    if(answer) {

        if (!files.exists()) {
            if (files.mkdirs() && generalFiles.mkdirs() && facilitiesFiles.mkdirs()) {

                JOptionPane.showMessageDialog (null, "New Image directories have been created!", "Image directory created", JOptionPane.INFORMATION_MESSAGE);

            } else {

                JOptionPane.showMessageDialog (null, "Failed to create multiple directories!", "Image directory not created", JOptionPane.INFORMATION_MESSAGE);

            }
        }

        DBConnection dBC = new DBConnection();
        Connection con = dBC.getDBConnection();
        String updateStmt = "UPDATE image_address SET image_address = ? WHERE rowid = ?";

        try {

            PreparedStatement myStmt = con.prepareStatement(updateStmt);
            myStmt.setString(1, imageDirPathTxtField.getText());
            myStmt.setInt(2, 1);
            myStmt.executeUpdate();
            myStmt.close();

            imageDirPathTxtField.clear();

        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

@FXML
public void backupButtonClicked () {

    String backupStatus = null;

    if (backupLbl.getText().equals("")&& !imageDirPathTxtField.getText().equals("")) {

        backupStatus = imageDirPathTxtField.getText();

    } else if (!imageDirPathTxtField.getText().equals("")) {

        backupStatus = imageDirPathTxtField.getText();

    } else if (!backupLbl.getText().equals("")){

         backupStatus = backupLbl.getText();

    } else {

        JOptionPane.showMessageDialog(null, "You must create a directory.", "No directory created", JOptionPane.INFORMATION_MESSAGE);
        return;
    }

    boolean answer = ConfirmBox.display("Set Image", "Are you sure you want to backup the images?");

    if(answer) {

        DBConnection dBC = new DBConnection();
        Connection con = dBC.getDBConnection();
        String updateStmt = "UPDATE image_address SET image_address = ? WHERE rowid = 2";

        try {

            PreparedStatement myStmt = con.prepareStatement(updateStmt);
            myStmt.setString(1, backupStatus);
            myStmt.executeUpdate();
            myStmt.close();

            String source = imageDirLbl.getText() + "tolmarImages";
            File srcDir = new File(source);

            String destination = backupStatus + "tolmarImages";
            File destDir = new File(destination);

            try {

                FileUtils.copyDirectory(srcDir, destDir);
                JOptionPane.showMessageDialog(null, "Images copied successfully.", "Images copied", JOptionPane.INFORMATION_MESSAGE);

            } catch (IOException e) {

                e.printStackTrace();

            }

        } catch (SQLException e) {

            e.printStackTrace();

        }
    }
}

}