Java 上载一组.png文件并保存到HashMap中

Java 上载一组.png文件并保存到HashMap中,java,javafx,upload,hashmap,png,Java,Javafx,Upload,Hashmap,Png,我需要上传一个文件夹,其中包含x个.png文件,并将它们保存到hashmap中。 我怎样才能做到这一点。 我的想法是 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\\im

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

    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 map=newhashmap();
对于(int i=map.size();map>0;map--){
put(i,新图像(新文件输入流(“C:\\Users\\drg\\Documents\\Image”+i+“.png”));
}
问题是,在开始时,我的HashMap包含0项,因此它将始终保持为0。那么,如果我不知道文件夹中有多少.png文件,我如何将.png文件添加到HashMap中呢

另一个问题是,我正在使用FileInputStream,需要知道.png文件的确切“名称”。
我怎样才能知道有多少个.png文件并将它们上载到我的HashMap中,而不需要知道它们的确切文件名?

您所需要做的就是列出文件夹的内容并找到匹配的文件名。例如,使用
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());

如果您需要按整数对它们进行索引,那么当您有文件名时,提取该整数值就相当容易了。

如果有帮助,您可以帮助使用文件选择器手动选择文件(如使用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);
    }
```
```
私有void上传照片(){
FileChooser FileChooser=newfilechooser();
//设置文件扩展名类型筛选器(图片)
fileChooser.getExtensionFilters().addAll
(新的FileChooser.ExtensionFilter(“图片文件”,“*.jpg”,“*.png”);
//设置初始目录(查找当前系统用户)
文件初始目录;
字符串user=System.getProperty(“user.name”);//与平台无关
列出所选文件;
试一试{
initialDirectory=新文件(“C:\\Users\\”+user+“\\Pictures”);
setInitialDirectory(initialDirectory);
selectedFiles=fileChooser.showOpenMultipleDialog(Main.stage);
}捕获(例外e){
initialDirectory=新文件(“C:\\Users\\”+用户);
setInitialDirectory(initialDirectory);
selectedFiles=fileChooser.showOpenMultipleDialog(Main.stage);
}
```

您的具体要求是什么?您需要用整数值对它们进行索引吗?或者任何图像集合都足够吗?假设您确实是从文件系统加载的,您只需在此处列出相应文件夹的内容。这可能很有用:
```
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);
    }
```