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:
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;
}
}
Eseguendolo non sposta nessun file, stampa sempre "The File was not moved.".
Allora ho provato usando la libreria nio:
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);
}
}
}
Ma viene lanciata l'eccezione:
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:
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);
}
}
}
Ma anche così non funziona.
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