|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2008
Messaggi: 64
|
[java] ordinamento contenuto cartella
Ciao a tutti,ennesimo problema nella realizzazione del mio applicativo
Mi permetto di spiegare un pochino il funzionamto altrimenti non si capisce nulla. In sostanza il mio applicativo fa il grab dei video e salva i frame (ogni 64 crea una cartella nuova).In sostanza quando li salva,non li ordina in maniera corretta,o meglio se li ordina in base alla prima cifra (ordinamento per nome).Infatti quando vado per leggere una di queste directory per caricare le immagini come lista di icone,me le carica in maniera sbagliata. Vi spiego meglio...x esempio,la prima cartella contiene le foto da 1 a 64 (alle quali dò come nome i numeri stessi, 1.jpg,2.jpg...),ed al posto di sistemarle correttamente,windows le imposta automaticamente così: 1,10,11...19,2,20,21,...29,3,30,31... Quindi nella lista le carica con questo ordine. Avevo pensato di dare nomi con 3 cifre...tipo 001,002...ma così penso che l'ordinamento automatico di windows funzioni soltanto fino a 999 frame. Quindi chiedo se qualcuno sa se magari esiste qualche metodo che mi permetta di accedere alla directory e ordinare le foto in maniera corretta prima di caricarle nella lista. Grazie anticipatamente per una eventuale risposta.Ciao |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
In tre parole.
Prendi i file dalla cartella: Codice:
FileFilter filter = new FileFilter() {
public boolean accept(File f) {
String name = f.getName().toLowerCase();
return name.endsWith(".jpg");
}
};
File[] frames = cartella.listFiles(filter);
Codice:
Comparator<File> comp = new Comparator<File>() {
public int compare(File a, File b) {
String nameA = a.getName();
String nameB = b.getName();
nameA = nameA.substring(0, nameA.indexOf("."));
nameB = nameB.substring(0, nameB.indexOf("."));
int indexA = Integer.parseInt(nameA);
int indexB = Integer.parseInt(nameB);
return indexA == indexB ? 0 : indexA > indexB ? 1 : -1;
}
};
Arrays.sort(frames, comp);
Controlla un po' il codice perchè l'ho scritto al volo |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Nov 2008
Messaggi: 64
|
Ho inserito il codice che dici tu...ma da alcuni errori.
Questa è la parte di codice: Codice:
File f[]=dir.listFiles(new ImageFilenameFilter ());
Comparator<File> comp = new Comparator<File>() {
public int compare(File a, File b)
{
String nameA = a.getName();
String nameB = b.getName();
nameA = nameA.substring(0, nameA.indexOf("."));
nameB = nameB.substring(0, nameB.indexOf("."));
int indexA = Integer.parseInt(nameA);
int indexB = Integer.parseInt(nameB);
return indexA == indexB ? 0 : indexA > indexB ? 1 : -1;
}
};
Arrays.sort(f,comp);
Codice:
Applicazione.java:154: '(' or '[' expected
Comparator<File> comp = new Comparator<File>() {
^
Applicazione.java:154: cannot resolve symbol
symbol : variable Comparator
location: class Frame
Comparator<File> comp = new Comparator<File>() {
^
Applicazione.java:154: cannot resolve symbol
symbol : variable File
location: class Frame
Comparator<File> comp = new Comparator<File>() {
^
Applicazione.java:154: cannot resolve symbol
symbol : variable comp
location: class Frame
Comparator<File> comp = new Comparator<File>() {
^
Applicazione.java:166: cannot resolve symbol
symbol : variable comp
location: class Frame
Arrays.sort(f,comp);
^
5 errors
Io non l'ho mai usata....cosa cambia dal modo che ho sempre usato? |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Se non vado errato la sintassi che ho usato risale al '97, con l'introduzione di Java 1.1.
Non la definirei nuova, almeno non di zecca Si chiama istanziazione di classe anonima. In generale: Codice:
C x = new C() {}
Codice:
class SubC [extends/implements] C {
}
C x = new SubC();
Ho verificato il codice che ho scritto ed è corretto. Devi importare java.io.File, java.io.FileFilter e java.util.Comparator. |
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Nov 2008
Messaggi: 64
|
Già li avevo importati...non riesco a capire xkè non gli piace sta sintassi!
Il tutto è dentro un try...non penso c'entri nulla,vero? Codice:
public void azione(File dir)
{
try
{
//array di file
File f[]=dir.listFiles(new ImageFilenameFilter ());
Comparator<File> comp=new Comparator<File>() {
public int compare(File a, File b)
{
String nameA = a.getName();
String nameB = b.getName();
nameA = nameA.substring(0, nameA.indexOf("."));
nameB = nameB.substring(0, nameB.indexOf("."));
int indexA = Integer.parseInt(nameA);
int indexB = Integer.parseInt(nameB);
return indexA == indexB ? 0 : indexA > indexB ? 1 : -1;
}
};
Arrays.sort(f,comp);
//array di oggetti ImageViewerItem delle dimensioni dell'array precedente
ImageViewerItem [] items = new ImageViewerItem[f.length];
for(int i=0;i<f.length;i++)
{
items[i]=new ImageViewerItem(f[i],-1,100);
}
//Costruisce una ListModel da un array di oggetti e dopo applica il setModel ad essa
ListaIcone.setListData(items);
//prendo il file txt nella cartella corrente
File ArrayTxt[]=dir.listFiles(new TxtFilenameFilter ());
for(int j=0;j<ArrayTxt.length;j++)
{
FileDiTestodir=ArrayTxt[j].getAbsolutePath();
}
BufferedReader input=new BufferedReader(new FileReader(new File(FileDiTestodir)));
String linea=input.readLine();
righe=new ArrayList();
//riempio l' ArrayList
while(linea!=null)
{
righe.add(linea); // aggiunge una linea letta alla lista di String
linea=input.readLine();
}
}
catch (Exception e)
{
System.err.println (e);
}
}
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
forse non gli piacciono i generici. Usi una versione di Java pari o superiore alla 1.5?
|
|
|
|
|
|
#7 |
|
Member
Iscritto dal: Nov 2008
Messaggi: 64
|
Veramento uso una versione un pò + datata
1.4.1 |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2004
Città: Tra Verona e Mantova
Messaggi: 4553
|
Un'aggiornatina non farebbe male
Codice:
Comparator comp=new Comparator() {
public int compare(Object filea, Object fileb)
{
File a = (File)filea;
File b = (File)fileb;
String nameA = a.getName();
String nameB = b.getName();
nameA = nameA.substring(0, nameA.indexOf("."));
nameB = nameB.substring(0, nameB.indexOf("."));
int indexA = Integer.parseInt(nameA);
int indexB = Integer.parseInt(nameB);
return indexA == indexB ? 0 : indexA > indexB ? 1 : -1;
}
};
|
|
|
|
|
|
#9 |
|
Member
Iscritto dal: Nov 2008
Messaggi: 64
|
Hai ragione,lo dico da tempo che devo farla questa aggiornatina
Cmq adesso va...grazie per l'ennesimo aiuto |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:20.



















