我正在尝试建立一个库存管理系统,并且最近问了一个关于如何在我的src文件中将图像存储在包中的问题。有人告诉我,你不应该存储存储类文件的图像,但是没有告诉你文件系统的最佳实践。我创建了一个新页面,允许用户输入有关他们要添加到系统的新零件的所有数据,并上传与零件关联的图像。当他们保存时,一切正常,直到您尝试重新加载零件数据库。如果你刷新' eclipse然后更新数据库,一切都很好,因为你可以在刷新时看到图像弹出到包中。 (所有数据库信息也都正确更新。
我被告知不要存储这些类型的新品种。带有程序文件的图像,但要创建一个单独的文件系统来存储这些类型的图像。这些类型的文件系统是否有最佳实践?我的困惑是当程序被保存到将要保存的地方时,我无法指向一个绝对路径,因为它可能不会保存在C驱动器或K驱动器上而我不会想要一个只是坐在C盘上的图像文件夹,其中包含所有零件图像供任何人使用。请给我一些关于如何构建这些文件系统的好资源。我想要图像文件夹'打包'当我编译它并将所有文件打包在一起时,我无法找到任何关于此的好信息,谢谢!
答案 0 :(得分:1)
要回答这个问题,可能不是最好的方式,但效果很好。
我最终创建了另一个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();
}
}
}
}