Avatar billede willi Nybegynder
16. oktober 2002 - 17:58 Der er 13 kommentarer og
2 løsninger

renameTo

Frygteligt surt.
Af mange omveje og timer har jeg nået frem til intet.

Jeg vil lave et program som læser et directory og renamer alle filer i directory.

Dvs jeg troede jeg med en substring lige kunne passe på extension og så "på en eller anden led" anvende renameTo metoden.

Nogen som kan forklarer mig hvordan den kan/skal bruges.

import java.io.*;


public class FindFil implements FilenameFilter
{       
        public boolean accept(File dir, String name)
            {
            return new File(dir, name).isFile();
            }
   
            public static void main(String[] args)
            {
            File file = null;
            File newFileName = null;
           
                    File dir = new File("h://Test/");
                    String[] files = dir.list(new FindFil());
                    System.out.println(files.length +  " dir(s):");
                    for(int i = 0; i < files.length; i=i+1)
                        //System.out.println(files[i]);
                        if ( files.length != 0)
                                {    String test = files[i++];
                                    String subTest = test.substring(test.length() - 4);
                                    System.out.println(test);
                                    System.out.println(subTest);
        String nytNavn = "test";
                                file.renameTo(nytNavn);
        }
}
}
Avatar billede hbhansen Nybegynder
16. oktober 2002 - 18:02 #1
Virker det da ikke ?
Du mangler da kun at putte ext på ik?
Avatar billede hbhansen Nybegynder
16. oktober 2002 - 18:03 #2
Jeg vil gætte på det er fordi du mangler hele stien:
String nytNavn = "h://Test/test";
Avatar billede disky Nybegynder
16. oktober 2002 - 18:08 #3
Ret
File dir = new File("h://Test/");
til enten
File dir = new File("h:/Test/");
eller
File dir = new File("h:\\Test\\");

din if(files.length!=0) kan du godt fjerne da dette check ligger i din for løkke.

Hvad er du du prøver på med subString ?
Avatar billede willi Nybegynder
16. oktober 2002 - 20:30 #4
Det som jeg gerne vil er at læse filerne ind fra et directory.
F.eks. et directory med .jpg filer som har alle mulige navne P1001021.jpg, P1432453.jpg osv.

Disse filer i dette directory skal så omdøbes til 1.jpg, 2.jpg osv.

Måske med et sigende navn som Sommerferie_02_nr_1.jpg eller lign.
Avatar billede willi Nybegynder
16. oktober 2002 - 21:48 #5
Disky:
Substring anvendte jeg for udelukke extension.
Men det er vist lige meget fordi alene er filnavnet renameTo ændre.
Avatar billede hbhansen Nybegynder
16. oktober 2002 - 21:52 #6
Jeg deltog i et andet spørgsmål på et tidspunkt http://www.eksperten.dk/spm/270053 noget lig dette problem, er løste jeg det på følgende måde:
class FilDir {

    public FilDir(String streng)
    {
        File dir = new File(streng);
        File dirTemp;
     
        if(dir.isDirectory())
        {
            String[] subDir = dir.list();
         
            int nr=0;
            for(int i=0;i<subDir.length;i++)
            {
                dirTemp = new File(dir + "\\" + subDir[i]);
                if(dirTemp.isDirectory())
                {
                    dirTemp.renameTo(new File(dirTemp + " (" + nr + ")"));
                    nr++;
                }
            }
        }
    }
 
    public static void main(String args[]) {
        FilDir mainFrame = new FilDir(args[0]);
    }

Programmet startes så med java FilDir c:/test/ //et bilblioteknavn
Avatar billede willi Nybegynder
16. oktober 2002 - 22:18 #7
jeg ser...
Avatar billede willi Nybegynder
16. oktober 2002 - 22:40 #8
Jeg stopper for idag...
Det funger sikkert. Men ikke længere mig ;-)
Avatar billede willi Nybegynder
06. december 2002 - 11:48 #9
Hej. Lidt lang tid siden.
Men jeg har stadig brug for en løsning:

Hvis jeg compilere denne kode i UltraEdit (mit niveau) på følgende måde:

import java.io.*;

class FilDir {

    public FilDir(String streng)
    {
        File dir = new File("f:\\asp");
        File dirTemp;
     
        if(dir.isDirectory())
        {
            String[] subDir = dir.list();
         
            int nr=0;
            for(int i=0;i<subDir.length;i++)
            {
                dirTemp = new File(dir + "\\" + subDir[i]);
                if(dirTemp.isDirectory())
                {
                    dirTemp.renameTo(new File(dirTemp + " (" + nr + ")"));
                    nr++;
                }
            }
        }
    }
 
    public static void main(String args[]) {
        FilDir mainFrame = new FilDir(args[0]);
    }
}

/*java.lang.ArrayIndexOutOfBoundsException
    at FilDir.main(FilDir.java:28)
Exception in thread "main"
*/

...får jeg den sidste /* */ kommentar.
Hvorfor?
Avatar billede disky Nybegynder
06. december 2002 - 12:02 #10
ret

    public static void main(String args[]) {
        FilDir mainFrame = new FilDir(args[0]);
    }

til

    public static void main(String args[]) {
        FilDir mainFrame = new FilDir();
    }


Hvis du starter programmet uden en parameter fejler den args[0] da der ikke er nogle argumenter
Avatar billede disky Nybegynder
06. december 2002 - 12:05 #11
Ups der mangler lige en anden ting også:

Det her virker:

import java.io.*;

class FilDir {

    public FilDir()
    {
        File dir = new File("d:/temp");
        File dirTemp;
     
        if(dir.isDirectory())
        {
            String[] subDir = dir.list();
         
            int nr=0;
            for(int i=0;i<subDir.length;i++)
            {
                dirTemp = new File(dir + "\\" + subDir[i]);
                if(dirTemp.isDirectory())
                {
                    dirTemp.renameTo(new File(dirTemp + " (" + nr + ")"));
                    nr++;
                }
            }
        }
    }
 
    public static void main(String args[]) {
        FilDir mainFrame = new FilDir();
           
    }
}


Hvis du vil havde parameter med brug:

import java.io.*;

class FilDir
{
   
    public FilDir(String path)
    {
        File dir = new File(path);
        File dirTemp;
       
        if(dir.isDirectory())
        {
            String[] subDir = dir.list();
           
            int nr=0;
            for(int i=0;i<subDir.length;i++)
            {
                dirTemp = new File(dir + "\\" + subDir[i]);
                if(dirTemp.isDirectory())
                {
                    dirTemp.renameTo(new File(dirTemp + " (" + nr + ")"));
                    nr++;
                }
            }
        }
    }
   
    public static void main(String args[])
    {
        if(args.length>0)
        {
            FilDir mainFrame = new FilDir(args[0]);
        }
        else
        {
            System.out.println("Du kaldte programmer forkert");
        }
       
    }
}


p.s. hvis path'en ikke er gyldig får du en FileNotFoundException osv.
Så der skal lidt error control med ind i det også senere.
Avatar billede willi Nybegynder
06. december 2002 - 14:02 #12
Programmet ændre ikke filnavnet men tilføjer blot.

-----

import java.io.*;

class FilDir {

    public FilDir()
    {
        File dir = new File("d:/temp");
        File dirTemp;
     
        if(dir.isDirectory())
        {
            String[] subDir = dir.list();
         
            int nr=0;
            for(int i=0;i<subDir.length;i++)
            {
                dirTemp = new File(dir + "\\" + subDir[i]);
                if(dirTemp.isDirectory())
                {
                    dirTemp.renameTo(new File(dirTemp + " [ test " + nr + "]"));
                    nr++;
                }
            }
        }
    }
 
    public static void main(String args[]) {
        FilDir mainFrame = new FilDir();
           
    }
}

/* Jeg får ikke til at renameTo til at virke.
Den tilføjer blot.

Ny mappe  -bliver blot til:


Ny mappe [ test 0]
Ny mappe (2) [ test 1]

*/
Avatar billede disky Nybegynder
06. december 2002 - 21:33 #13
Yep nøjagtig som dit program beder den om ud fra:
dirTemp.renameTo(new File(dirTemp + " [ test " + nr + "]"));

Du tager jo det gamle navn 'dirTemp' og adderer et nummer i []'ere

Ret den linie til det du ønsker f.eks.
dirTemp.renameTo(new File(nr+".jpg"));
Avatar billede willi Nybegynder
17. december 2002 - 00:23 #14
Tak for hjælpen. Beklager den sene respons.
Avatar billede disky Nybegynder
17. december 2002 - 09:01 #15
Det er helt okay, det vigtigste er du fik hjælp :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester