gpt4 book ai didi

java - Files.copy 抛出 java.nio.file.NoSuchFileException 即使要复制的文件确实存在

转载 作者:搜寻专家 更新时间:2023-11-01 03:38:37 26 4
gpt4 key购买 nike

我对一个看似简单的应用程序有疑问。它应该做什么:

-读出一个(硬编码)目录的文件(*.jpg)

-使用所述 jpg 包含的元数据(通过实现的库获得)生成目录(./year/month/)

-将文件复制到相应的目录中。

它没有的东西:- 将文件复制到相应的目录中,因为它找不到原始文件(它之前自己读出的文件)。老实说,我不知道为什么会这样。

这里是源代码:

package fotosorter;

import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.imaging.jpeg.JpegProcessingException;
import com.drew.metadata.Metadata;
import com.drew.metadata.exif.ExifIFD0Directory;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.nio.file.Files;
import java.util.Date;

public class Fotosorter {

/**
* @param args the command line arguments
*/
public static void main(String[] args) throws JpegProcessingException, IOException {
File startdir = new File(System.getProperty("user.dir"));
FileFilter jpg = new FileFilter() {
@Override
public boolean accept(File pathname) {
return pathname.getAbsoluteFile().toString().toLowerCase().endsWith(".jpg");
}
};

File dir = new File(startdir, "bitmaps"+File.separator+"java-temp");
if (!(dir.exists() && dir.isDirectory())) {
if (!dir.mkdir()) {
throw new IOException("kann das Verzeichnis nicht erzeugen ");
}
}


File[] files = new File(startdir, "" + File.separator + "bitmaps" + File.separator + "java-fotos").listFiles(jpg);
for (File file : files) {
Metadata metadata = JpegMetadataReader.readMetadata(file);
ExifIFD0Directory directory = metadata.getDirectory(ExifIFD0Directory.class);
String[] dates = directory.getDate(ExifIFD0Directory.TAG_DATETIME).toString().split(" ");

File year = new File(dir, dates[5]);
File month = new File(year, dates[1]);

File fname = new File(month, file.getName());
if (!(month.getParentFile().exists() && month.getParentFile().isDirectory())) {
if (!month.mkdirs()) {
throw new IOException("kann die Verzeichnisse nicht erzeugen");
}
}

copyFile(file, fname);
}
}

public static void copyFile(File from, File to) throws IOException {
Files.copy(from.toPath(), to.toPath());
}

这里是它抛出的完整异常:

run: Exception in thread "main" java.nio.file.NoSuchFileException: D:\Benutzerdaten\Paul\Documents\NetBeansProjects\Fotosorter\bitmaps\java-fotos\cimg2709.jpg -> D:\Benutzerdaten\Paul\Documents\NetBeansProjects\Fotosorter\bitmaps\java-temp\2008\Sep\cimg2709.jpg at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:79) at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97) at sun.nio.fs.WindowsFileCopy.copy(WindowsFileCopy.java:205) at sun.nio.fs.WindowsFileSystemProvider.copy(WindowsFileSystemProvider.java:277) at java.nio.file.Files.copy(Files.java:1225) at fotosorter.Fotosorter.copyFile(Fotosorter.java:64) at fotosorter.Fotosorter.main(Fotosorter.java:59) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds)

您可能已经猜到它还没有完成。除了解决我之前提到的问题外,我还必须将其放入方法中。

最佳答案

确保输入文件存在。

但还要确保目标文件夹的路径确实存在。

关于java - Files.copy 抛出 java.nio.file.NoSuchFileException 即使要复制的文件确实存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21366901/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com