Toon posts:

[java] bestand wijzigen/deleten

Pagina: 1
Acties:

Verwijderd

Topicstarter
Even een snelle achtergrond...
Ik gebruik een applicatie die van bepaalde bestanden html bestanden kan maken. De output hiervan is echter
HTML001.htm
HTML002.htm
enz

Ik heb nu een proggie gemaakt die de TITLE tag uit deze bestanden oppakt en de naam van het bestand hiernaar wijzigt.

Allemaal leuk, maar het daadwerkelijke renamen werkt niet helemaal lekker. Ik gebruik gewoon de rename() methode van de File class.

Dit gaat echter maar af en toe goed.

Het lijkt wel of een ander programma deze bestanden ook benadered en ik daarom tegen een soort lock aan loop te hikken.
De rename methode geeft een boolean terug. Ik heb geprobeerd om deze methode door te hakken net zolang hij gelukt is.

Java:
1
while (!bestand.renameTo(nieuweNaam)){}

ten eerste is dit natuurlijk rommel, maar het werkt niet eens. Mijn processor loopt te malen als een idioot en er gebeurt weinig. Na een minuutje heeft hij slechts een paar bestanden weten te renamen.

Ik heb het ouderwetse kopieer gebeuren ook geprobeerd. Maar de delete() methode (van het oude bestand achteraf) geeft hetzelfde resultaat.

Dit hele zaakje lijkt wat wispelturig. Herkent iemand dit probleem?

  • yrew
  • Registratie: Augustus 2001
  • Laatst online: 22:01
Kijk uit dat je niet meerdere referenties naar het zelfde bestand in je programma hebt staan.

vb:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Renamer{

       public Renamer{
       }

       private void selecteerBestand(){ 
          File toRename = new File();
          toRename = reName(toRename);
       }


       private File reName(File aFile){
            File myRenamer = aFile;
            myRenamer.rename();
       }
}


bovenstaande zal fout gaan omdat je nu twee referenties naar het bestand hebt lopen namelijk : toRename en myRenamer. Dit zal ook met deleten fout gaan.

Groetjes


Verwijderd

Topicstarter
Bingo!

Ik had al zo'n flauw vermoeden, maar ik had gedacht dat de VM hier wel rekening zou houden.

Bedankt!

  • Bobco
  • Registratie: Januari 2001
  • Laatst online: 30-10-2023

Bobco

I used to dream about Verona.

Verwijderd schreef op 09 October 2003 @ 23:59:

Ik had al zo'n flauw vermoeden, maar ik had gedacht dat de VM hier wel rekening zou houden.
Waarom zou de VM dat moeten doen? File-locking is een verantwoordelijkheid van het OS/filesystem. Als jij vanuit twee verschillende threads iets op hetzelfde bestand wil laten doen dan moet er 'ergens' vastgesteld worden wie er voorrang heeft. Een OS/VM levert alleen maar de mogelijkheden om processen tegen elkaar te beschermen, maar geen beslissingsmechanisme om te bepaken wie er voorrang heeft.

With the light in our eyes, it's hard to see.


Verwijderd

Topicstarter
genoteerd.