|
![](/App_Themes/Normal/images/Window/Backgrounds/news.gif) | 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)
![](/App_Themes/Normal/images/Window/Backgrounds/news.gif) | 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)
![](/App_Themes/Normal/images/Window/Backgrounds/news.gif) | 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)
![](/App_Themes/Normal/images/Window/Backgrounds/news.gif) | 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
| |
![](/images/tree/0.gif) Ulrik Magnusson (09-05-2003)
![](/App_Themes/Normal/images/Window/Backgrounds/news.gif) | 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! ![Blink](images/smileys/wink.gif) 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
| |
|
|