FAT32 Sorter gebastelt

sorter

Cadet 1st Year
Registriert
März 2014
Beiträge
14
Hallo zusammen,

ich habe die letzten Monate einen Sorter für FAT32 mit Java 7 programmiert. Sinn und Zweck ist es, Dateien auf FAT32 Laufwerken zu sortieren. Um genau zu sein, z. B. die Reihenfolge von MP3s auf dem USB Stick oder im Autoradio die Playliste zu sortieren.

Windows kopiert üblicherweise die Dateien absolut unsortiert, angefangen irgendwo in der Mitte des Alphabets.
Theoretisch kann man das Programm leicht modifiziert als Kopiertool einsetzen, dass die Dateiattribute nicht verändert.

Grüße
 
Zuletzt bearbeitet:
Muss damit umkopiert werden? Umkopierer gibt's schon zuhauf.
Interessant wäre ein Programm, was die Daten da lässt wo sie sind und nur die FAT selbst passend editiert.
Ab Vista braucht man da allerdings Admin-Rechte, da darf man nicht mehr so einfach an der FAT rumfummeln.
 
Zuletzt bearbeitet:
Sry für meine unqualifizierte Frage, aber für was benötigt man das?
 
shh schrieb:
Muss damit umkopiert werden? Umkopierer gibt's schon zuhauf
es gibt
1) kopieren und sortieren
2) nur sortieren

letzteres wird für dich interessesant. umkopierer gibt es, allerdings sind mir keine untergekommen die funktionieren bzw. sortiert kopieren

@Rego
Wenn du z.b. im Autoradio einen USB stick stecken hast und die neusten lieder als erstes hören willst. dann sortiert das programm die lieder.
 
Rego schrieb:
Sry für meine unqualifizierte Frage, aber für was benötigt man das?
Wenn du an einem Autoradio vom USB-Stick Musik wiedergeben willst. Diese werden nicht nach Nummerierung vom Radio abgespielt,sondern nach dem Zeitpunkt, an dem sie auf den Stick kopiert wurden. Wenn man jetzt zB Hörspiele hören möchte und die kreuz und quer abgespielt werden,weil Windows sie so kopiert hat, dann sind solche Sortierprogramme eine wahre Hilfe.
 
Hi,

das hängt aber doch vom Radio ab oder nicht? Bei meinem Pioneer war es z.B. so, dass er nach ID3-Tag alphabetisch abgespielt hat. So pauschal kann man die Aussage also sicher nicht treffen...

VG,
Mad
 
> 2) nur sortieren
> letzteres wird für dich interessesant.

Wie machstn das, dass dabei die Daten nicht nochmal umkopiert werden?
 
richtiges "taggen", (evtl. vernünftige zusätzliche Ordner), vernünftiges Radio...
obervernünftigen Player (Foobar) zum taggen, kopieren, umbenennen, konvertieren etc. ...

mehr fällt mir jetzt im Moment auch nicht ein, hatte diese Probleme noch nie... :)
 
shh schrieb:
> 2) nur sortieren
> letzteres wird für dich interessesant.

Wie machstn das, dass dabei die Daten nicht nochmal umkopiert werden?
java 7 hat mit der klasse files die move-funktion dabei, dazu stellt man einen wartezeit von 15 ms pro kopierte datei ein, womit die dateien auf dem wechseldatenträger kurz verschoben werden.

um den FAT32 header selbst bearbeiten zu können, wäre C++ usw. nötig

---
alternativ kann man bei windows-only für jede datei ein .bat datei erzeugen und in diese den move-befehl von windows schreiben / ausführen lassen.
Ergänzung ()

Madman1209 schrieb:
Hi,

das hängt aber doch vom Radio ab oder nicht? Bei meinem Pioneer war es z.B. so, dass er nach ID3-Tag alphabetisch abgespielt hat. So pauschal kann man die Aussage also sicher nicht treffen...
wie immer gibt es radios die mehr können oder weniger.
 
Zuletzt bearbeitet:
Meins spielt auch nach Alphabet ab, aber ich kenne auch viele, die das nach Kopierzeitpunkt machen. Auf jeden Fall ne super Sache :) Der ein oder andere Kollege hat von mir hat sich da schon mal drüber aufgeregt ;)
 
> [...] wäre C++ usw. nötig

Nö, geht auch mit JAVA. Dafür braucht man aber JNI/JNA für den low level access.

> java 7 hat mit der klasse files die move-funktion dabei

Wie jetzt genau? Ein Umbenennen auf sich selbst?
file.move("C:\\datei.mp3", "C:\\datei.mp3",REPLACE_EXISTING);

> dazu stellt man einen wartezeit von 15 ms pro kopierte datei ein[...]

Wuah! :eek: Was sagt dir, dass dieses Timing _immer_stimmt, bei jeder SD-Karte, bei jedem USB-Stick? Was ist, wenn der Datenträger im Powermanagement ist? Was sagt dir, dass das auch auf anderen Plattformen ordentlich synct?
Nimmst du ATOMIC_MOVE nicht her?
 
Hi,

wollt auch einfach mal sagen: super gemacht!

Ich persönlich hab zwar weniger Bedarf dafür, aber meine Schwester hat schon länger auf sowas gewartet.
 
performi schrieb:
richtiges "taggen", (evtl. vernünftige zusätzliche Ordner), vernünftiges Radio...
obervernünftigen Player (Foobar) zum taggen, kopieren, umbenennen, konvertieren etc. ...

mehr fällt mir jetzt im Moment auch nicht ein, hatte diese Probleme noch nie... :)

Richtiges taggen bringt da überhaupt nichts, da der Zeitstempel des Bewegens der Datei hierbei wichtig ist und solange Windows nicht in der sortierten oder getaggten Reihenfolge kopiert ist das alles für die Katz'.
Leider leiden fast alle verbauten (älteren) Radios der Autohersteller unter diesem Problem, somit sind solche Programme eine gute, schnelle und vor allem billige Lösung (im Gegensatz zu einem neuen Autoradio ;) )
 
Danke Leute

shh schrieb:
> dazu stellt man einen wartezeit von 15 ms pro kopierte datei ein[...]

Wuah! :eek: Was sagt dir, dass dieses Timing _immer_stimmt, bei jeder SD-Karte, bei jedem USB-Stick? Was ist, wenn der Datenträger im Powermanagement ist? Was sagt dir, dass das auch auf anderen Plattformen ordentlich synct?
Nimmst du ATOMIC_MOVE nicht her?
Wenn du weißt wie man das Benutzen eines Timers umgehen kann, darfst du es mir gerne verraten. Ohne Timer kopiert Windows nämlich wie es lustig ist. ATOMIC_MOVE wird bisher nicht benutzt.
 
soulreeper schrieb:
(im Gegensatz zu einem neuen Autoradio)
eben, schon beim Wort Radio-Autohersteller graust es meinen Ohren...(meistens) :)

während mein Billig-JVC-Teil wenigstens:
interpretiert ID3-Tags - Darstellung von Künstlername, Songtitel etc
Praktisch: Das Autoradio merkt sich auch im USB-Betrieb, bei welchem Musikstück man es abschaltet oder den Stick entfernt hat. Bei der nächsten Inbetriebnahme oder beim Wieder-Einsetzen des Sticks geht es dort weiter.
also immer ärgern (über Windows ?) oder mal was besseres zulegen... :)

und nicht zu vergessen, sein "unnützes" JAVA zukünftig in jedem Forum beschützen... :D
 
Du hast nicht alle meine Fragen beantwortet. Wenn du dir nicht in die Karten schauen lassen möchtest, wird dir keiner helfen können.
Nur soviel: Mit nem Timer, der irgendwie mit BS/Chipsatz/Peripherie korrespondieren soll, macht man das auf gar keinen Fall!
http://docs.oracle.com/javase/7/doc...a.nio.file.Path, java.nio.file.CopyOption...)
ATOMIC_MOVE garantiert einen abgeschlossenen Vorgang. D.h. deine Änderung sollte nach Beenden der Methode auch auf dem Datenträger angekommen sein, zumal Windows für hotplug-Geräte auch keinen Schreib-cache verwendet. Wenn Windows trotzdem ATOMIC_MOVE blockiert oder die Befehle kumuliert, blockierst DU das BS irgendwie, dass es dazwischen keinen file-sync machen darf.
> Window freezez while files are copied. It's not coded multi threaded.
Ein guter Hinweis drauf, dass deine GUI-Code-Integration nicht richtig funktioniert. Wenn die GUI einfriert, lässt du Windows nicht seine Arbeit machen (z.B. file-syncs, Fenster neuzeichnen etc.).

- warum verwendest du AbsoluteLayout - ist doch in java.awt.Container schon drin?
- warum verwendest du commons-io, statt den Std-IOs von JDK7?
So, Ende der Glaskugelraterei... ohne code mach gar nichts mehr. :rolleyes:
 
performi schrieb:
eben, schon beim Wort Radio-Autohersteller graust es meinen Ohren...(meistens) :)

während mein Billig-JVC-Teil wenigstens:

also immer ärgern (über Windows ?) oder mal was besseres zulegen... :)

und nicht zu vergessen, sein "unnützes" JAVA zukünftig in jedem Forum beschützen... :D

Ich beschütz hier garnichts...:evillol: Wollte nur die Sinnhaftigkeit solcher Art Programme darlegen. :D

Mein Auto hat zB einen 2DIN-Schacht, dass heißt ich kann nicht jedes x-beliebige Radio einsetzen (mal abgesehen vom fragwürdigen Design mancher Systeme).
Und nur damit ich mal alle drei Monate auf einer längeren fahrt ein Hörbuch hören kann werde ich sicher nicht hunderte von Euro ausgeben, wenn mein Werksradio ohne Probleme MP3's von USB-Sticks spielt (wenn man sie sortiert...:p ) und dabei auch noch das Navi bei Ansagen über das Autoradio wiedergeben kann.
 
@performi
leg dir einen audi mit vollausstattung zu, dann kannst du deine medien in virtuellen playlisten ordnen wie du willst, sogar noch mit sprachsteuerung. :)
bei mir hats nur zu nem 50€ sony radio gereicht.

@shh
java swing muss multithreaded programmiert werden, um z.b. eine progressbar zu zeigen. das habe ich mir aber bisher gespart. edit: korrigiere mich wenn ich falsch liege, aber java swing hat nur einen thread der nacheinander alle aufgaben abarbeitet.

AbsoluteLayout: schnell und einfach alle komponenten anhand der x-, y-koordinaten ausrichten. wurde so von netbeans eingefügt.
commons-io: löscht z.b. bequem ordner, sehr brauchbare bibliothek.
code: muss dich enttäuschen, bis sonntag abend habe ich meinen PC nicht zur verfügung.

edit2: vorschläge wie man ohne einen timer auskommt sind herzlich willkommen.
der code dazu ist sehr simpel:
Code:
Files.move(sourcePath, targetPath());
TimeUnit.MILLISECONDS.sleep(15);
 
Zuletzt bearbeitet:
Ich vermute, dass du die zwei Zeilen (bzw. ne Schleife über alle zu verschiebenden Dateien) im ButtonEvent ausführst?
Da würde dann als Zeile 3 sowas wie Application.ProcessMessages() fehlen - das gibt's aber nicht in Java.
Das ist der EventDispatchThread, und da ist das BS erstmal so lange blockiert, bis die Methode wieder verlassen wird. Da "drin" macht man keine größeren Sachen, und das ist auch der Grund warum deine move-Befehle nicht vollständig bearbeitet werden.
1. die Schleife mit den move-Befehlen muss in einen extra Thread. Das ist nicht schwer, da gibt's zig tutorials.
2. wenn Windows das Schreiben puffert, d.h. sortieren wieder nicht funktioniert, zusätzlich ATOMIC_MOVE verwenden.
 
Zurück
Oben