Toon posts:

[Java] Maximum grootte bij wegschrijven File

Pagina: 1
Acties:

Verwijderd

Topicstarter
De vakantie periode komt eraan en dan wil je wat leuke muziek op je iPod hebben. Het overzetten naar de iPod gaat makkelijk met playlists in m3u formaat. Maar, je wilt de muziek wel indelen in aparte playlists met aparte genres. Daarvoor maak ik eerst een playlist met alle muziek waarna ik steeds uit die basisplaylist de nummers er uit haal die in een bepaalde playlist moeten. Achteraf wil ik dan de basisplaylist aanpassen door de nummers daaruit te halen die nu in de juiste (nieuwe) playlist zitten. Zo weet ik zeker dat ik achteraf alle nummers uit de basisplaylist heb ingedeeld in een andere playlist. In Winamp kon ik daar geen functie voor vinden dus ik besloot zelf maar wat te schrijven in Java. Een playlist is van het volgende formaat:

code:
1
2
3
4
5
6
7
#EXTM3U
#EXTINF:206,Acda & de Munnik - Foto's Van Vandaag
F:\Acda En De Munnik - Foto's Van Vandaag.mp3
#EXTINF:201,Acda en de Munnik - Ik Weet Het Beter
F:\Acda en de Munnik - Ik Weet Het Beter.mp3
#EXTINF:193,Acda en de Munnik - Misschien wel niets
F:\Acda en de Munnik - Misschien wel niets.mp3


De volgende code loopt elke line in de basisplaylist (behalve de eerste) af en bekijkt of deze line ook voorkomt in de nieuwe playlist. Als dit zo is, dan wordt deze line niet geschreven naar de nieuwe playlist en wordt de volgende line bekeken. Uiteindelijk zou dit dan de basisplaylist min de nieuwe playlist moeten opleveren.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    public static void substract(File base, File substract) throws IOException {
        
        BufferedReader readerBase = new BufferedReader(new FileReader(base));
        String line;
        
        PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(new File("substracted.m3u"))));
        
        writer.println(readerBase.readLine());
        
        while((line = readerBase.readLine()) != null) {
            
            if(!inFile(line, substract)) {

               System.out.println(line);
               writer.println(line);
            }
        }
        
        readerBase.close();
    }
    
    public static boolean inFile(String baseLine, File substract) throws IOException {
        
        boolean result = false;
        BufferedReader readerSubstract = new BufferedReader(new FileReader(substract));
        String line;
        
        readerSubstract.readLine();
        
        while((line = readerSubstract.readLine()) != null && !result) {
            
            result = baseLine.equals(line);
        }
        
        readerSubstract.close();
                
        return result;
    }


Het probleem is echter dat het resultaat precies een grootte van 8kb heeft waarin niet alles staat wat er in zou moeten staan. De System.out.println geeft echter wel de juiste informatie! Ik heb andere wrappers geprobeerd maar dit lost niks op. Via Google en GoT kan ik niks vinden over deze schijnbare beperking. Weet iemand iets over deze beperking?

Verwijderd

writer.flush() zodat gebufferde bytes weggeschreven worden.

Verwijderd

Topicstarter
Hoe kan ik dat vergeten |:( Anyway, het is opgelost.. bedankt!

Verwijderd

'diff file1 file2' is je vriend, onder linux dan :)

Verwijderd

Misschien nog een idee om close() in finally blocks te doen.

  • Alex
  • Registratie: Juli 2001
  • Laatst online: 28-02 19:26
Verwijderd schreef op vrijdag 15 juli 2005 @ 19:43:
'diff file1 file2' is je vriend, onder linux dan :)
Erg offtopic, maar wel relevant: Dit wil je absoluut niet, want dan haal je heel de platform onafhankelijkheid eruit!

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


Verwijderd

Alex de Groot schreef op vrijdag 15 juli 2005 @ 23:39:
Erg offtopic, maar wel relevant: Dit wil je absoluut niet, want dan haal je heel de platform onafhankelijkheid eruit!
En wat is het probleem daarvan???

  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
En anders zijn er voldoende diff implementaties onder Java te vinden.

  • Jimbolino
  • Registratie: Januari 2001
  • Laatst online: 03-05 20:15

Jimbolino

troep.com

of windows versies van diff ;)

The two basic principles of Windows system administration:
For minor problems, reboot
For major problems, reinstall


Verwijderd

Topicstarter
Diff was misschien ook wel handig geweest ja... Ik had deze code in 5 min. geschreven maar het vergeten van de flush() deed me uiteindelijk de das om ;)

  • PanMan
  • Registratie: November 1999
  • Laatst online: 04-05 23:09

PanMan

Spun!

Overigens zijn hier volgens mij ook wel tooltjes voor: Ik volg niet precies wat je nu wil, maar Ephpod, dat ik gebruik om m'n Ipod vol te laden kan vrij uitgebreid playlists maken per genre enzo.

Where a calculator on the ENIAC is equipped with 18,000 vacuum tubes and weighs 30 tons, computers in the future may have only 1,000 vacuum tubes and weigh only 1.5 tons.
– Popular Mechanics, March 1949


Verwijderd

Topicstarter
PanMan schreef op zaterdag 16 juli 2005 @ 15:25:
Overigens zijn hier volgens mij ook wel tooltjes voor: Ik volg niet precies wat je nu wil, maar Ephpod, dat ik gebruik om m'n Ipod vol te laden kan vrij uitgebreid playlists maken per genre enzo.
Dat werkt alleen als elk nummer de juiste genre in de ID-tag heeft :)
Pagina: 1