Exakt vad ska koden göra? Lite svårt att veta vad man kan ta bort/göra om utan att veta vad som ska hända...
Vet inte hur mycket detta snabbar upp det hela, men mer lättläst blir det:
//Byt ut
if (!filearr[o][0].substring(filearr[o][0].indexOf(".",0),filearr[o][0].length()).equals(".TXT") && !filearr[o][0].substring(filearr[o][0].indexOf(".",0),filearr[o][0].length()).equals(".txt"))
//Mot
if (!filearr[o][0].substring((filearr[o][0].length() - 4), filearr[o][0].length()).toLowerCase().equals(".txt"))
Detta sparar in lite på radlängden i alla fall ;) Man behöver ju inte använda indexOf, vi vet ju att de fyra sista tecknen ska vara .txt. Och om vi sänker ev. stora bokstäver slipper vi kolla båda. Du kan också göra motsvarande vid det andra användningstillfället.
Tar du några argument? Det finns ju några variabler som inte initerats; invno, dat, custno och boolean-varianterna av dessa... Inte för att det gör nån jätteskillnad, men ändå.
Över huvud taget är det en bra idé att låta bli att bygga upp strängar dynamiskt mha String:ar och plusoperatorn. Använd i stället StringBuffer så sparar du på resurserna.
Jag måste erkänna att jag inte fattar vad koden är tänkt att göra. Har du lust att förklara kanske jag kan komma med insiktsfulla kommentarer, men just nu orkar jag inte sätta mig in, riktigt...
Vore det inte bättre om du hade någon form av klass som motsvarar en sån här fil, i stället för att ha en massa tvådimensionella arrayer? Då skulle du kunna cacha objekten på nåt snyggt sätt mellan sökningarna. Det tar upp mer minne, men du slipper gröta runt med en massa textsträngar hela tiden. Då kan du även (ev.) använda betydligt effektivare sökningar med t.ex. binary search.
Jag antar att du får fram filnamnen genom File.listFiles? Använder du då den versionen som tar emot ett FileFilter?
Undefined variable: FilenameFilter
FilenameFilter filter=FilenameFilter;
^
Method FilenameFilter() not found in class _fileList_jsp_48
FilenameFilter filter=FilenameFilter();
^
interface java.io.FilenameFilter is an interface. It can't be instantiated.
FilenameFilter filter=new FilenameFilter();
^
och NullPointerException om jag skriver
File fl = new File(dir);
FilenameFilter filter=null;
filter.accept(fl,"*.pdf");
Undefined variable: FilenameFilter
FilenameFilter filter=FilenameFilter;
^
Method FilenameFilter() not found in class _fileList_jsp_48
FilenameFilter filter=FilenameFilter();
^
interface java.io.FilenameFilter is an interface. It can't be instantiated.
FilenameFilter filter=new FilenameFilter();
^
Det första felet beror på att du inte har en variabel som heter FilenameFilter, som felmeddelandet indikerar.
Sen försöker du anropa en metod som heter FilenameFilter i din egen klass, men någon sådan har du inte.
Sist så år det som så att FilenameFilter är ett interface, alltså något som andra klasser kan implementera. Ett interface kan inte instansieras, dvs skapas ett objekt av.
Jag hittar inte några standardklasser som implementerar FilenameFilter, så du får nog skriva en egen. Den skulle kunna se ut så här:
class MittFilter implements FilenameFilter
{
public boolean accept(File dir, String name)
{
return (name.endsWith(".den_filändelse_du_vill_söka_efter"));
}
}
Sen kan du instansiera denna klass såhär
public class DinKlass
{
public static void main(String[] args)
{
MittFilter filter = new MittFilter();
File fil = new File("mapp");
File[] filer = fil.listFiles(filter);
}
}
Detta borde fungera, men då jag inte har någon kompilator så lämnar jag inga garantier ;)
for (int z=0;z<reallen;z++)
{
for (o=0;o<reallen;o++)
{
if (Integer.parseInt(filearr[o][sort]) > Integer.parseInt(filearr[z][sort]))
{
temp = filearr[o];
filearr[o] = filearr[z];
filearr[z] = temp;
}
}
}
Är den tveklöst mest ineffektiva sorteringsmetoden. Du skulle kunna testa att köra med quicksort (med lite modifikation iom strängar och inte int'ar). Men egentligen är inte det heller en bra lösning och jag tvivlar starkt på att exempelvis windows inbyggda sökfunktioner använder samma taktik som du nu gör (Du jämförde ju själv med windows inbyggda), utan de lär bygga upp det kring regexp'ar istället och de använder ju definitivt inte en Virtual Machine som JVM utan det handlar nog då om en för cpu'n direkt anpassad maskinkod. Men det behöver inte betyda att ditt program är skit för det, utan det var bara en liten kommentar kring din jämförelse med windows sökfunktioner :)