【问题标题】:Upload a set of .png files and save into a HashMap上传一组 .png 文件并保存到 HashMap
【发布时间】:2021-03-07 07:11:06
【问题描述】:

我需要上传一个文件夹,其中包含 x 个 .png 文件,并将它们保存到哈希图中。 我怎样才能做到这一点。 我的想法是

    HashMap<Integer,Image> map = new HashMap<>();
    for (int i= map.size();map>0;map-- ){
        map.put(i, new Image(new FileInputStream("C:\\Users\\drg\\Documents\\image"+i+".png")));
    }

问题是,一开始我的 HashMap 包含 0 个项目,因此它始终保持为 0。所以如果我不知道我的文件夹中有多少个 .png 文件,我该如何将 .png 文件添加到我的 HashMap 中。

另一个问题是我正在使用 FileInputStream 并且需要知道 .png 文件的确切“名称”。 如何在不知道确切文件名的情况下找出有多少个 .png 文件并将它们上传到我的 HashMap 中?

【问题讨论】:

  • 您的具体要求是什么?您是否需要按整数值对它们进行索引?或者任何图像集合就足够了?假设你真的是从文件系统加载,你需要做的就是列出相应文件夹的内容。

标签: java javafx upload hashmap png


【解决方案1】:

您需要做的就是列出文件夹的内容并找到匹配的文件名。例如。使用java.nio API 并将图像放入列表中:

Path folder = FileSystems.getDefault().getPath("Users", "drg", "Documents");
List<Image> images = Files.list(folder)
    .filter(path -> path.getFileName().toString().matches("image\\d+\\.png"))
    .map(Path::toUri)
    .map(URI::toString)
    .map(Image::new)
    .collect(Collectors.toList());

或者使用旧的java.io API:

File folder = new File("C:/Users/drg/Documents");
File[] imageFiles = folder.listFiles(file -> file.getName().matches("image\\d+\\.png"));
List<Image> images = new ArrayList<>();
for (File file : imageFiles) {
    images.add(new Image(file.toURI().toString()));
}

如果您需要按整数索引它们,当您拥有文件名时,提取该整数值相当容易。

【讨论】:

    【解决方案2】:

    如果有帮助,您可以帮助使用 FileChooser 手动选择文件(如使用 GUI),您可以将它们加载到列表中,然后从列表转到地图可能更容易?

    ```
    private void uploadPhoto() {
        FileChooser fileChooser = new FileChooser();
        //Sets file extension type filters (Pictures)
        fileChooser.getExtensionFilters().addAll
                (new FileChooser.ExtensionFilter("Picture Files", "*.jpg", "*.png"));
        
        //Setting initial directory (finds current system user)
        File initialDirectory;
        String user = System.getProperty("user.name"); //platform independent
        List<File> selectedFiles;
        try {
            initialDirectory = new File("C:\\Users\\" + user + "\\Pictures" );
            fileChooser.setInitialDirectory(initialDirectory);  
            selectedFiles = fileChooser.showOpenMultipleDialog(Main.stage);
        } catch(Exception e) {
            initialDirectory = new File("C:\\Users\\" + user);
            fileChooser.setInitialDirectory(initialDirectory);
            selectedFiles = fileChooser.showOpenMultipleDialog(Main.stage);
        }
    ```
    

    【讨论】:

      猜你喜欢
      • 2012-02-24
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 2016-05-17
      相关资源
      最近更新 更多