/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
Recursiv gennemgang i biblioteks struktur.
Fra : Rune Klausen


Dato : 07-05-03 22:09

Jeg ønsker at lave en recursiv gennemgang af bibliotekst stutruen i et givet
bibliotek, og derefter skal denne struktur kopieres et sted hen.

Her er min kode, emn jeg får en NULL.pointer exeception, jeg har lidt på
fornemmelsen at jeg skal returnere noget, et eller andet sted, er der nogen
som kan hjælpe mig lidt ?

import java.io.*;
public class Copy
{
private File fobj, bobj;
private String[] list;

public Copy()
{
}

public void Kopi(String newPath, String backPath)
{
fobj = new File(newPath);
bobj = new File(backPath);
list = fobj.list();
System.out.println(fobj + " --> " + bobj);
for(int i = 0; i < list.length; i++)
{
System.out.println(list[i] + " her er vi så i listen");
if(fobj.isDirectory())
{
bobj.mkdir();
Kopi(newPath + list[i] + "\\", backPath + list[i] + "\\");

}
else if(fobj.isFile())
{
System.out.println("Der er en fil");
}
else
System.out.println("Noget er galt!");
}
}
}

-Rune



 
 
Ulrik Magnusson (08-05-2003)
Kommentar
Fra : Ulrik Magnusson


Dato : 08-05-03 16:02



Rune Klausen wrote:

> Jeg ønsker at lave en recursiv gennemgang af bibliotekst stutruen i et givet
> bibliotek, og derefter skal denne struktur kopieres et sted hen.
>
> Her er min kode, emn jeg får en NULL.pointer exeception, jeg har lidt på
> fornemmelsen at jeg skal returnere noget, et eller andet sted, er der nogen
> som kan hjælpe mig lidt ?
>
> import java.io.*;
> public class Copy
> {
> private File fobj, bobj;
> private String[] list;
>
> public Copy()
> {
> }
>
> public void Kopi(String newPath, String backPath)
> {
> fobj = new File(newPath);
> bobj = new File(backPath);
> list = fobj.list();
> System.out.println(fobj + " --> " + bobj);
> for(int i = 0; i < list.length; i++)
> {
> System.out.println(list[i] + " her er vi så i listen");
> if(fobj.isDirectory())
> {
> bobj.mkdir();
> Kopi(newPath + list[i] + "\\", backPath + list[i] + "\\");
>
> }
> else if(fobj.isFile())
> {
> System.out.println("Der er en fil");
> }
> else
> System.out.println("Noget er galt!");
> }
> }
> }
>
> -Rune

Der er 2 problemer i koden:

1) I det rekursive kald modificerer du "globale" objekter, som
bruges i loopet (list, fobj og bobj). Modifikation af globale
objekter i rekursive metoder er altid er faresignal.

2) I loopet undersøger du fobj som er "stien" til hvor du er nu -
du vil i virkeligheden undersøge list[i].

Begge problemer er løst her:

public void Kopi(String newPath, String backPath)
{
File fobj, bobj;
String[] list;
fobj = new File(newPath);
bobj = new File(backPath);
list = fobj.list();
System.out.println(fobj + " --> " + bobj);
for(int i = 0; i < list.length; i++)
{
System.out.println(list[i] + " her er vi så i listen");
File tmpFObj = new File(newPath + list[i]);
if(tmpFObj.isDirectory())
{
new File(backPath + list[i]).mkdir();
Kopi( newPath + list[i]+ "\\", backPath + list[i] + "\\");

}
else if(tmpFObj.isFile())
{
System.out.println("Der er en fil");
}
else
System.out.println("Noget er galt!");
}
}

- hvilket selvfølgelig kan forkortes til:

public void Kopi( File newPath, File backPath )
{
File[] list = newPath.listFiles();
for( int i = 0; i < list.length; i++ )
{
if( list[i].isDirectory() )
{
File tmpBack = new File( backPath.getAbsolutePath()
+ File.separator
+ list[i].getName() );
tmpBack.mkdir();
Kopi2( list[i], tmpBack );
}
}
}


Ulrik Magnusson



Rune Klausen (09-05-2003)
Kommentar
Fra : Rune Klausen


Dato : 09-05-03 00:03


"Ulrik Magnusson" <ulrikm@yahoo.com> wrote in message
news:3EBA717A.A2F84E14@yahoo.com...
>
> Der er 2 problemer i koden:
>
> 1) I det rekursive kald modificerer du "globale" objekter, som
> bruges i loopet (list, fobj og bobj). Modifikation af globale
> objekter i rekursive metoder er altid er faresignal.
>
> 2) I loopet undersøger du fobj som er "stien" til hvor du er nu -
> du vil i virkeligheden undersøge list[i].
>
> Begge problemer er løst her:
>
> public void Kopi(String newPath, String backPath)
> {
> File fobj, bobj;
> String[] list;
> fobj = new File(newPath);
> bobj = new File(backPath);
> list = fobj.list();
> System.out.println(fobj + " --> " + bobj);
> for(int i = 0; i < list.length; i++)
> {
> System.out.println(list[i] + " her er vi så i listen");
> File tmpFObj = new File(newPath + list[i]);
> if(tmpFObj.isDirectory())
> {
> new File(backPath + list[i]).mkdir();
> Kopi( newPath + list[i]+ "\\", backPath + list[i] + "\\");
>
> }
> else if(tmpFObj.isFile())
> {
> System.out.println("Der er en fil");
> }
> else
> System.out.println("Noget er galt!");
> }
> }
>
> - hvilket selvfølgelig kan forkortes til:
>
> public void Kopi( File newPath, File backPath )
> {
> File[] list = newPath.listFiles();
> for( int i = 0; i < list.length; i++ )
> {
> if( list[i].isDirectory() )
> {
> File tmpBack = new File( backPath.getAbsolutePath()
> + File.separator
> +
list[i].getName() );
> tmpBack.mkdir();
> Kopi2( list[i], tmpBack );
> }
> }
> }
>

Takker, jeg afprøver i morgen aften :)

-Rune



Rune Klausen (09-05-2003)
Kommentar
Fra : Rune Klausen


Dato : 09-05-03 21:09


"Ulrik Magnusson" <ulrikm@yahoo.com> wrote in message
news:3EBA717A.A2F84E14@yahoo.com...

> - hvilket selvfølgelig kan forkortes til:
>
> public void Kopi( File newPath, File backPath )
> {
> File[] list = newPath.listFiles();
> for( int i = 0; i < list.length; i++ )
> {
> if( list[i].isDirectory() )
> {
> File tmpBack = new File( backPath.getAbsolutePath()
> + File.separator
> +
list[i].getName() );
> tmpBack.mkdir();
> Kopi2( list[i], tmpBack );
> }
> }
> }
>

Det er jo for sejt :)
Er du meget dygtig til Java ?

Men hvorfor er det at man skal lave en temp, hvor det kan ligge i, og ikke
bare bruge den oprindlige ?

-Rune



Ulrik Magnusson (09-05-2003)
Kommentar
Fra : Ulrik Magnusson


Dato : 09-05-03 22:14

Rune Klausen wrote:

> Det er jo for sejt :)
> Er du meget dygtig til Java ?

Jeg er da helt vildt sej! Jeg har faktisk aldrig arbejdet professionelt
med Java, nu du spørger, men det har været min hobby de sidste 5 år.
Derudover er jeg "Sun Certified Programmer"..

> Men hvorfor er det at man skal lave en temp, hvor det kan ligge i, og ikke
> bare bruge den oprindlige ?

Fordi der ikke er nogen "setAbsolutePath()" eller lignende i java.io.File,
og jeg skal have et File objekt til at pege på den ny sti, så jeg kan bruge
isDirectory() metoden.

Ulrik Magnusson


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408924
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste