上传一组 .png 文件并保存到 HashMap 中
Upload a set of .png files and save into a HashMap
我需要上传一个包含 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.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()));
}
如果您需要按整数索引它们,当您有文件名时提取整数值相当容易。
如果有帮助,您可以帮助使用 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);
}
```
我需要上传一个包含 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.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()));
}
如果您需要按整数索引它们,当您有文件名时提取整数值相当容易。
如果有帮助,您可以帮助使用 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);
}
```