Ciao a tutti, sto scrivendo un programmino che sposta un file .mp3 in una directory scelta.
Ho provato diverse funzioni che fanno ciò ma nessuna funziona.
Ecco il codice:
Eseguendolo non sposta nessun file, stampa sempre "The File was not moved.".codice:public static void moveToRightDirectory(File song, String album) throws IOException { album = album.trim(); String pathDirectory = selectedDir + "\\" + album + "\\"; File dir = new File(pathDirectory); //se la cartella esiste già, sposto la canzone if(dir.exists()) { moveSong(song, dir); } //se la cartella non esiste, la creo e sposto il file else if(!dir.exists()) { boolean success = (new File(pathDirectory)).mkdirs(); if(!success) { System.out.println("Problema nella creazione della cartella."); } else { moveSong(song, dir); } } //altrimenti errore else { System.out.println("Errore."); } } /** * Sposta la canzone. */ public static void moveSong(File song, File dir) { String songPath = song.getAbsolutePath(); System.out.println(songPath); try { System.out.println("\n" + song.getAbsolutePath() + " è aperto: " + checkFileAlreadyOpen(song)); File oldFile = new File(song.getAbsolutePath()); String dirPath = dir.getAbsolutePath()+ "\\"+ oldFile.getName(); System.out.println(dirPath); if(oldFile.renameTo(new File(dir.getAbsolutePath()+ "\\"+ oldFile.getName()))) { System.out.println("The file was moved successfully to the new folder."); } else { System.out.println("The File was not moved."); } } catch (Exception e) { e.printStackTrace(); } } /** * Ritorna true se file è aperto da un altro processo, false altrimenti. */ public static boolean checkFileAlreadyOpen(File file) { boolean isFileUnlocked = false; try { org.apache.commons.io.FileUtils.touch(file); isFileUnlocked = true; } catch(IOException e) { isFileUnlocked = false; } if(isFileUnlocked) { return false; } else { return true; } }
Allora ho provato usando la libreria nio:
Ma viene lanciata l'eccezione:codice:public static void moveToRightDirectory(File song, String album) throws IOException { album = album.trim(); String pathDirectory = selectedDir + "\\" + album; File dir = new File(pathDirectory); System.out.println("dir.exists(): " + dir.exists()); if(dir.exists()) { Files.move(song.toPath(), dir.toPath(), StandardCopyOption.REPLACE_EXISTING); } else { boolean success = (new File(pathDirectory)).mkdirs(); if(!success) { System.out.println("Error creating directory."); } else { Files.move(song.toPath(), dir.toPath(), StandardCopyOption.REPLACE_EXISTING); } } }
java.nio.file.FileSystemException: C:\Users\...\Adele\Cold shoulder.mp3 -> C:\Users\...\Adele\19: The process cannot access the file because it is being used by another process.
Non ho aperto nessun music player quindi in quale processo è aperto il file?
Quindi ho provato ad usare la libreria di Apache:
Ma anche così non funziona.codice:public static void moveToRightDirectory(File song, String album) throws IOException { album = album.trim(); String pathDirectory = selectedDir + "\\" + album; File dir = new File(pathDirectory); System.out.println("dir.exists(): " + dir.exists()); if(dir.exists()) { FileUtils.moveFile(song, dir); } else { boolean success = (new File(pathDirectory)).mkdirs(); if(!success) { System.out.println("Error creating directory."); } else { FileUtils.moveFile(song, dir); } } }
Non so più cosa fare.. Come posso risolvere?
Ho cercato su Internet ma non ne sono venuto ancora a capo..
Grazie a chiunque voglia aiutarmi![]()

Rispondi quotando