Avatar billede halden Nybegynder
09. oktober 2003 - 13:55 Der er 35 kommentarer og
1 løsning

Rename fil på disk

Hvis jeg nu har den fulde sti til en fil, eks: c:\noget\her.jpg

og jeg skal have den omdøbt til c:\noget\noget.jpg

hvordan gøres det lettest???
Kode eksempel, tak.
Avatar billede arne_v Ekspert
09. oktober 2003 - 14:00 #1
(new File("c:\noget\her.jpg")).renameTo("c:\noget\noget.jpg");
Avatar billede europe Nybegynder
09. oktober 2003 - 14:02 #2
prøv med

File herFile = new File ("c:\noget\her.jpg");
File copyFile = new File (c:\noget\noget.jpg");

boolean copieret = herFile.renamTo(copyFile);
Avatar billede arne_v Ekspert
09. oktober 2003 - 14:06 #3
europe har ret.

Argumentet er også en File ikke en String.

(new File("c:\noget\her.jpg")).renameTo(new File("c:\noget\noget.jpg"));

i kompakt form.

Sorry.
Avatar billede halden Nybegynder
09. oktober 2003 - 14:24 #4
hvordan tilføjer man en \ til en strin????
Avatar billede halden Nybegynder
09. oktober 2003 - 14:24 #5
string
Avatar billede europe Nybegynder
09. oktober 2003 - 14:25 #6
dobbelt slash
\\
Den første er en escape den anden bliver skrevet...
Avatar billede halden Nybegynder
09. oktober 2003 - 14:26 #7
bare glem det...
Avatar billede europe Nybegynder
09. oktober 2003 - 14:27 #8
Et eksempel på hvad den kan bruges til
System.out.println("Dette skrives på\n 2 linjer");

Det kommer ud som følger

Dette skrives på
to linjer
Avatar billede arne_v Ekspert
09. oktober 2003 - 14:40 #9
Ups.

Den missede jeg også.

Enten \\ eller / (/ virker også på Windows !).
Avatar billede halden Nybegynder
09. oktober 2003 - 14:44 #10
det virker ikke. Jeg bliver ved med at få false tilbage...
Avatar billede halden Nybegynder
09. oktober 2003 - 14:46 #11
her er lidt af koden:
File fil = new File(rs1.getString("Billede"));
                    String sti = rs1.getString("Billede");
                    int index = sti.lastIndexOf(92);
                    String nySti = "";
                    for(int i=0; i<index+1; i++) {
                        nySti += sti.charAt(i);
                    }
                    nySti += ( request.getParameter("fabrikant") + " " + request.getParameter("navn") + ".jpg" );
                    this.getServletContext().log("Gammel sti: "+rs1.getString("Billede"));
                    this.getServletContext().log("Sti: "+nySti);
                   
                    File nyFil = new File(rs1.getString("Billede"));
                   
                    boolean kopieret = fil.renameTo(nyFil);
                    if (kopieret == false) {
                        this.getServletContext().log("Servlet:AdminOpdater-Fejl-kunne ikke omdøbe navet på billede filen");
                        response.sendRedirect("/Admin/adminFejl.jsp");
                    }
Avatar billede europe Nybegynder
09. oktober 2003 - 14:53 #12
Har du prøvet at skrive rs1.getString("Billede") ud for at se om det rent faktisk er en godkendt sti?

For mig at se, ser det ud til at nyFil og fil er den samme.
Avatar billede europe Nybegynder
09. oktober 2003 - 14:54 #13
File nyFil = new File(rs1.getString("Billede"));

skulle muligvis være

File nyFil = new File(nySti);
Avatar billede halden Nybegynder
09. oktober 2003 - 14:55 #14
Gammel sti er: c:\resin-2.1.9\doc\Billeder\ATI Radeon 9700 Pro.jpg
Ny sti er    : c:\resin-2.1.9\doc\Billeder\ATI Redeon 9700 Pro.jpg

Eneste forskel er Radeon > Redeon
Avatar billede halden Nybegynder
09. oktober 2003 - 14:59 #15
File fil = new File(rs1.getString("Billede"));
                    String sti = rs1.getString("Billede");
                    int index = sti.lastIndexOf(92);
                    String nySti = "";
                    for(int i=0; i<index+1; i++) {
                        nySti += sti.charAt(i);
                    }
                    nySti += ( request.getParameter("fabrikant") + " " + request.getParameter("navn") + ".jpg" );
                    this.getServletContext().log("Gammel sti: "+rs1.getString("Billede"));
                    this.getServletContext().log("Ny sti:    "+nySti);
                   
                    File nyFil = new File(nySti);
                   
                    boolean kopieret = fil.renameTo(nyFil);
                   
                    if (kopieret == false) {
                        this.getServletContext().log("Servlet:AdminOpdater-Fejl-kunne ikke omdøbe navet på billede filen");
                        response.sendRedirect("/Admin/adminFejl.jsp");
                    }

Giver stadig false...
Avatar billede europe Nybegynder
09. oktober 2003 - 15:02 #16
Har lige checket lidt - det viser sig at den fil som man kopier til ikke må indeholde mellemrum prøv med _ istedet - bare for at se at det er det der er galt...
Avatar billede halden Nybegynder
09. oktober 2003 - 15:06 #17
nySti += ( request.getParameter("fabrikant") + " " + request.getParameter("navn") + ".jpg" );
nySti.replaceAll(" ", "_");

stadig false...
Avatar billede europe Nybegynder
09. oktober 2003 - 15:08 #18
Nu har du retigheder til at ændre navnet på filen ?
Avatar billede europe Nybegynder
09. oktober 2003 - 15:09 #19
For det ser rent faktisk ud til at mellemrum er klaret alligevel det var en dumme fejl her fra....
Avatar billede halden Nybegynder
09. oktober 2003 - 15:11 #20
nySti = nySti.replaceAll(" ", "_");
sådan selvfølgelig

men det virker heller ikke
stadig false...
Avatar billede halden Nybegynder
09. oktober 2003 - 15:12 #21
hvis jeg ikke har rettighederne ville den give en SecurityException og den kommer ikke.
Avatar billede europe Nybegynder
09. oktober 2003 - 15:23 #22
Problemet kunne ligge i hvis
nyFil.exists() == true
Så kan den ikke renames til denne file.

Dvs. at den allerede existere...
Avatar billede halden Nybegynder
09. oktober 2003 - 15:24 #23
det gør den ikke. Har tjekket...
Avatar billede europe Nybegynder
09. oktober 2003 - 15:25 #24
Ja og selvfølgelig så findes den fil der prøves at rename..

Du kan godt høre at jeg er ved at være på barbund ik'!!!
Avatar billede halden Nybegynder
09. oktober 2003 - 15:30 #25
jo, det kan jeg godt høre, men det må sku kunne lade sig gøre.
Prøver lige at fuske lidt...
Avatar billede halden Nybegynder
09. oktober 2003 - 15:43 #26
Tjek lige det her ud. Det virker sku. Det er fordi der skal være / istedet for \.

try {
            File fil = new File("c:/noget.jpg");
            File nyFil = new File("c:/bla.jpg");
           
            boolean kopieret = fil.renameTo(nyFil);
           
            System.out.println("Succes: "+kopieret);
        }
        catch(Exception e) {
            System.out.println("fejl: "+e);
        }
Avatar billede europe Nybegynder
09. oktober 2003 - 15:45 #27
Bare for god ordens skyld kunne jeg godt tænke mig at du skrev følgende ind før du prøvede at rename filen.
this.getServletContext().log("gamFil exister "+fil.exists());
this.getServletContext().log("gamFil canWrite "+fil.canWrite());

this.getServletContext().log("nyFil exister "+nyFil.exists());
this.getServletContext().log("nyFil canWrite "+nyFil.canWrite());

Og poste resultatet her - så skal jeg se om jeg kan finde noget når jeg kommer hjem...
Avatar billede europe Nybegynder
09. oktober 2003 - 15:46 #28
Okay - kanon fejlen fundet ... WEEEEHEEEE
Avatar billede europe Nybegynder
09. oktober 2003 - 15:47 #29
Kører du på en unix maskine ?
Avatar billede halden Nybegynder
09. oktober 2003 - 15:48 #30
nope - windows
Avatar billede halden Nybegynder
09. oktober 2003 - 15:57 #31
Følgende virker ikke:
gaSti = gaSti.replaceAll("\\", "/");

Hvordan skal det så gøres???
Avatar billede arne_v Ekspert
09. oktober 2003 - 16:04 #32
Prøv med:

gaSti = gaSti.replaceAll("\\\\", "/");
Avatar billede europe Nybegynder
09. oktober 2003 - 16:04 #33
prøv med -- kender ikke replaceAll()

  while(gaSti.indexOf("\\")!=-1)
  {
    gaSti = gaSti.replace((char)92,(char)47);
  }
Avatar billede europe Nybegynder
09. oktober 2003 - 16:05 #34
Char 92 svar til \
og char 47 svar til /
Avatar billede halden Nybegynder
09. oktober 2003 - 16:34 #35
Det endte med det her og det virker...

String gaSti = getServletConfig().getServletContext().getRealPath("Billeder/"+rs1.getString("Fabrikant")+" "+rs1.getString("Navn")+".jpg");
                    while(gaSti.indexOf("\\")!=-1) {
                        gaSti = gaSti.replace((char)92,(char)47);
                    }
                    File fil = new File(gaSti);
                   
                    String nySti = getServletConfig().getServletContext().getRealPath("Billeder/"+request.getParameter("fabrikant")+" "+request.getParameter("navn")+".jpg");
                    File nyFil = new File(nySti);
                   
                    boolean kopieret = fil.renameTo(nyFil);
                   
                    if (kopieret == false) {
                        this.getServletContext().log("Servlet:AdminOpdater-Fejl-kunne ikke omdøbe navet på billede filen");
                        response.sendRedirect("/Admin/adminFejl.jsp");
                    }
Avatar billede halden Nybegynder
09. oktober 2003 - 16:43 #36
jeg synes alligevel at du skal have nogle point >europe for at have hjulpet mig igennem.
Opretter lige et nyt spørgsmål til dig...
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