

Java - soubor nelze smazat
Dobrý den,
Potřeboval bych smazat soubory, co jsem si sám vytvořil. Ovšem nejde to. Dělám to pomocí tohohle kódu.
public void play() {
number += 1;
if (number < LIST_FILES.size()) {
hit = new Media(new File(LIST_FILES.get(number).toString()).toURI().toString());
setText(LIST_FILES.get(number).getName().substring(0, LIST_FILES.get(number).getName().lastIndexOf(".")));
media_player = new MediaPlayer(hit);
media_player.setOnEndOfMedia(() -> play());
media_player.play();
} else {
for (File file: LIST_FILES)
if (file.getName().endsWith("wav")) {
System.out.println(file.delete());
}
LIST_FILES.clear();
choose_song();
}
}
Metoda file.delete() funguje čistě náhodně, někdy se nesmaže nic a nebo se smaže pouze pár souborů.
Když jsem však použil metodu Files.delete(file.toPath()), tak to vyhodilo hlášku, že soubor nelze smazat, protože je využíván jiným procesem.
Jenže vůbec nevím který.
Prosím o radu
Předem děkuji.
Nešlo mě to smazat, tak jsem to dočasně odložil. Teď jsem se však k tomu znova vrátil.
Ve windows jsem zapnul Resource Monitor a tam zjistil, že nesmazatelné soubory jsou držené samotnou javou.
Když ji ukončím, tak se vypne celý program.
Nevíte, prosím vás, co s tím?
Děkuji.
Veď moose ti to už celé vysvetlil, že lepšie to snáď ani vysvetliť nejde, tak aký máš vlastne problém?
Tak už jsem to vyřešil. File má metodu deleteOnExit(), což je ideální, protože právě po zastavení projektu šly všechny soubory smazat.
Nicméně Runtime.getRuntime().gc(); musím zavolat i tak (mediaPlayer.dispose() nemá žádný vliv, takže je zbytečné ho tam psát).
Jelikož však jsou vytvořené soubory do ukončení projektu viditelné, tak bych se chtěl zeptat jak, prosím vás, nastavit soubor jako skrytý.
Děkuji.
Pokud jsou ty soubory jen docasne (po cas behu aplikace), tak nechapu proc nepouzijes tempfile...
deleteOnExit() funguje dobře, sice tam dochází ke zpoždění smazání, ale to nevadí.
Jenže jsem chtěl nastavit vytvořené soubory skryté.
Přímo v konstruktoru nastavím Runtime.getRuntime().exec("attrib +h " + getPath());
To funguje dobře, ale pouze od 2. souboru. 1. soubor (ten co se hned začne přehrávat) se skrytý nenastaví.
Nevíte, prosím vás, proč?
Děkuji.
Tak smazání funguje s deleteOnExit(); bez problému. (I když jsem volání garbage collector smazal).
Skrytí souborů lze udělat na 100%, ale musím použít nio třídy.
Výsledek je úplně stejný - skryje soubor. Sice musím importovat 3 třídy, ale když použiji Runtime, tak se první soubor skrytý nenastaví a nepodařilo se mi zjistit proč.
PS. Nebyl jsi to zrovna ty, kdo říkal, že NIO nepotřebuji?