2014-01-26 3 views
3

У меня проблема с кажущимся простым приложением. Что он должен делать:Files.copy throws java.nio.file.NoSuchFileException, хотя файл, который нужно скопировать, определенно существует

-Распознать из файлов (* .jpg) а (HARDCODED) каталога

-Использования содержащейся метаданным (полученные с помощью реализованных библиотек) указанных JPGs для создания каталогов (./ год/месяц /)

-копируйте файлы в соответствующие каталоги.

Что это: -копируйте файлы в соответствующие каталоги ПОТОМУ ЧТО НЕ Ищет оригинальные файлы (которые он сам читал ранее). Я честно не знаю, почему это так.

Здесь исходный код:

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()); 
} 

}

А вот полное исключение он бросает:

пробег: Исключение в потоке "основной" 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) на java.nio.file.Files.copy (Files.java:1225) на fotosorter.Fotosorter.copyFile (Fotosorter. Java: 64) в fotosorter.Fotosorter.main (Fotosorter.java:59) Java Результат: 1 BUILD УСПЕШНОГО (общее время: 0 секунд)

Как вы уже догадались, он еще не закончен. Помимо решения моей ранее заявленной проблемы, мне все равно придется использовать ее в методах.

+0

Есть ли D: \ Benutzerdaten \ Paul \ Documents \ NetBeansProjects \ Fotosorter \ bitmaps \ java-temp \ 2008 существуют? Почему вы вызываете mkdirs() только в том случае, если родительский файл месяца не существует, а не если сам месяц не существует? –

+0

Недавние изменения предполагают, вежливость не нужна на этом сайте. Кроме того, был смело снят реальный вопрос, а точнее «просьба о помощи и вдохновении». Надеюсь, это не повлияет на шансы на решение моей проблемы. – user3026231

+0

Нет, это не так. Но ответ на вопросы, заданные в комментариях, поможет получить ответ. –

ответ

0

Убедитесь, что входной файл существует.

Но также убедитесь, что путь к папке назначения существует.

Смежные вопросы