[java] Ophalen bestanden lukt niet

Pagina: 1
Acties:

  • yrew
  • Registratie: Augustus 2001
  • Laatst online: 21:30
Beste lui,

ik heb een module geschreven die inbelt op een andere pc, en hierop kijkt of er bestanden zijn om die vervolgens te kopieeren naar de home-directorie

Het inbellen gaat goed, de computer wordt netjes geregistreerd in het netwerk.
code:
1
2
3
 Process proc = Runtime.getRuntime().exec("RASDIAL mijninbelverbing" 
+userName + " " + password + " /phone:" +
 phoneNumber);


Wanneer ik nu wil gaan kijken hoeveel bestanden hij kan vinden op die locatie en hiervan de namen in een arraylist wil stoppen krijg ik een NullPointerException op files.length
code:
1
2
3
4
5
File f = new File("\\\\10.xx.xx.xx\\testdirectorie");
File[] files = f.listFiles();
 for (int x=0; x<files.length; x++) {
                res.add(files[x].getName());
 }


Dit kan ik oplossen door eerst een netwerkverbinding aan te maken in de windowsexplorer (map-networkdrive). Doe ik dit haalt hij netjes de bestanden op. Moet ik nu voor iedere pc een networkmapping aanmaken. Dit is namelijk niet werkbaar. Of vergeet ik een belangrijk regeltje wat er voor zorgt dat je die networkmapping achterwegen kan laten?

Mocht ik code vergeten zijn dan plaats ik het erbij...please let me know

[ Voor 16% gewijzigd door yrew op 15-07-2003 16:57 ]

Groetjes


  • whoami
  • Registratie: December 2000
  • Laatst online: 01:57
Je declareert een array van objects, maar je alloceert geen geheugen. Vandaar die nullpointer exception.

https://fgheysels.github.io/


  • jvo
  • Registratie: Augustus 2001
  • Laatst online: 04-10-2023

jvo

geen commentaar

whoami schreef op 15 July 2003 @ 16:39:
Je declareert een array van objects, maar je alloceert geen geheugen. Vandaar die nullpointer exception.
Sorry, maar dat is onzin. Je hoeft geen geheugen te alloceren in dit geval. Ik zou niet weten hoe je wel kan oplossen, maar niet door geheugen te alloceren voor de array.

[ Voor 1% gewijzigd door jvo op 15-07-2003 16:41 . Reden: Typo ]


  • momania
  • Registratie: Mei 2000
  • Laatst online: 22:52

momania

iPhone 30! Bam!

whoami schreef op 15 July 2003 @ 16:39:
Je declareert een array van objects, maar je alloceert geen geheugen. Vandaar die nullpointer exception.
Nee hoor, dat maakt niets uit.
Die listFiles() geeft waarschijnlijk al de nullPointer omdat de file 'f' niet gevonden kan worden vanwege de network mapping die niet betaat.

Neem je whisky mee, is het te weinig... *zucht*


  • jvo
  • Registratie: Augustus 2001
  • Laatst online: 04-10-2023

jvo

geen commentaar

momania schreef op 15 juli 2003 @ 16:41:
[...]

Nee hoor, dat maakt niets uit.
Die listFiles() geeft waarschijnlijk al de nullPointer omdat de file 'f' niet gevonden kan worden vanwege de network mapping die niet betaat.
Als de nullpointer echt op files.length zit, dan wil dat zeggen dat files naar null verwijst en dat f.listFiles() dus null teruggeeft.

Als de nullPointer bij f.listFiles() plaatsvindt, dan verwijst f naar null. Dan is daar is misgegaan. yrew, weet je zeker dat de nullPointer op files.length wordt gegooid?

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

jvo schreef op 15 July 2003 @ 16:40:
Sorry, maar dat is onzin. Je hoeft geen geheugen te alloceren in dit geval. Ik zou niet weten hoe je wel kan oplossen, maar niet door geheugen te alloceren voor de array.
Neehoor, dat is geen onzin. Bij Java hoeft het doorgaans alleen niet zo expliciet, de functie listFiles geeft gewoon een null terug, ipv een array van File's...

Wat whoami uitlegt is alleen maar hoe die nullpointer kan ontstaan.

  • yrew
  • Registratie: Augustus 2001
  • Laatst online: 21:30
2 WhoAmI: Ik heb er even mijn File declaratie bijgezet. Die stond er net niet. In de Class File wordt in dit geval de array van objecten gedeclareerd. Ik geef in deze dan ook alleen de referentie naar het geheugen van een object array door aan de mijne.

Die null.pointer krijg ik dus omdat het netwerkpad niet bestaat. Maar hoe maak ik deze buiten de windowsexplorer aan in java?

Groetjes


  • yrew
  • Registratie: Augustus 2001
  • Laatst online: 21:30
2 jvo: Ja, of hij moet op x++ vallen ;). Ik los dit probleem ook meteen op door die netwerkmapping aan te maken in de windows explorer...Maar hoe doe ik dit in java.

Ik snap trouwens niet waarom de Class File niet meteen een exceptie throwed

2 acm: Het geheugen wordt in deze al gealloceerd door het File object. Je geeft in principe alleen geheugenadressen door.

[ Voor 49% gewijzigd door yrew op 15-07-2003 16:54 ]

Groetjes


  • yrew
  • Registratie: Augustus 2001
  • Laatst online: 21:30
Ik dacht dat ik echt goed gezocht had maar het spijt me. Hier is de oplossing...(niet crossplatform ben ik bang)

Gebruik via Runtime.exec het externe programma "net" om een drive over tcp-ip te mappen.
code:
1
2
3
Process p = Runtime.exec("net use q: \\\\" 
+ aHost.getIpAdres() + " " + password + " /USER:blabla");
r = p.waitFor();

[ Voor 22% gewijzigd door yrew op 15-07-2003 17:18 ]

Groetjes


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

yrew schreef op 15 July 2003 @ 16:48:
Ik snap trouwens niet waarom de Class File niet meteen een exceptie throwed
Blijkbaar is de standaard methode voor "het is niet goed gegaan", het teruggeven van een null. En als jij daar niet op controleert, dan is dat jouw fout.
2 acm: Het geheugen wordt in deze al gealloceerd door het File object. Je geeft in principe alleen geheugenadressen door.
File files[] -> geen geheugenallocatie.
Pas bij:
files = new File[100] is er allocatie.

In jouw geval is er dus nog geen geheugenallocatie en werk je met niet-bestaande objecten, vandaar de nullpointer.
yrew schreef op 15 July 2003 @ 17:17:
(niet crossplatform ben ik bang)
Volgens mij is windows dan ook het enige platform dat zo vervelend doet met netwerkshares :)
In linux (en andere unices?) kan je dat on-boot volledig laten mounten als je dat wil.

Overigens denk ik dat dat RASDIAL van je ook niet heel erg goed werkt op andere systemen dan windows ;)

[ Voor 24% gewijzigd door ACM op 15-07-2003 17:31 ]


  • yrew
  • Registratie: Augustus 2001
  • Laatst online: 21:30
ACM schreef op 15 juli 2003 @ 17:29:
[...]

Blijkbaar is de standaard methode voor "het is niet goed gegaan", het teruggeven van een null. En als jij daar niet op controleert, dan is dat jouw fout.
inderdaad....zo zou je het ook kunnen zien.
ACM schreef op 15 juli 2003 @ 17:29:

File files[] -> geen geheugenallocatie.
Pas bij:
files = new File[100] is er allocatie.

In jouw geval is er dus nog geen geheugenallocatie en werk je met niet-bestaande objecten, vandaar de nullpointer.
[...]
In mijn geval alloceerd het File Object waarin ik vraag getFiles() het geheugen voor een eventuele File array. Echter doet hij dat niet vanwege een niet bestaande netwerkverbinding. Dus de declaratie is 100% goed. Om dit zonder netwerk mapping te doen niet....
ACM schreef op 15 juli 2003 @ 17:29:

Volgens mij is windows dan ook het enige platform dat zo vervelend doet met netwerkshares :)
In linux (en andere unices?) kan je dat on-boot volledig laten mounten als je dat wil.
mooi....want daar gaan we snel naartoe (linux dan)
ACM schreef op 15 juli 2003 @ 17:29:

Overigens denk ik dat dat RASDIAL van je ook niet heel erg goed werkt op andere systemen dan windows ;)
Uhm, maar hier hebben we een mooi if-statement voor die het OS bepaalt waarop het programma draait.

Ik heb dat "net" geimplementeerd en het loopt als een zonnetje.

[ Voor 14% gewijzigd door ACM op 15-07-2003 18:04 ]

Groetjes


  • jvo
  • Registratie: Augustus 2001
  • Laatst online: 04-10-2023

jvo

geen commentaar

ACM schreef op 15 July 2003 @ 16:45:
[...]

Neehoor, dat is geen onzin. Bij Java hoeft het doorgaans alleen niet zo expliciet, de functie listFiles geeft gewoon een null terug, ipv een array van File's...

Wat whoami uitlegt is alleen maar hoe die nullpointer kan ontstaan.
Oh, dat doet ie dan erg onduidelijk imho. Maar goed.

Trouwens, yrew, x++ kan geen nullPointer geven, omdat het een int is ;)

Maar goed dat het gelukt is. Het zat er wel aan te komen dat het een niet platformafhankelijke oplossing was. Well done.

  • yrew
  • Registratie: Augustus 2001
  • Laatst online: 21:30
jvo schreef op 16 July 2003 @ 10:45:
[...]

Oh, dat doet ie dan erg onduidelijk imho. Maar goed.

Trouwens, yrew, x++ kan geen nullPointer geven, omdat het een int is ;)

Maar goed dat het gelukt is. Het zat er wel aan te komen dat het een niet platformafhankelijke oplossing was. Well done.
Opm1: Ik roep een methode aan van een class (File). Deze methode alloceerd een Array in het geheugen. Stopt er wat in en geeft de REFERENTIE terug. Ik zeg mijnArray = File.getArray waarmee ik mijnArray dus de referentie(het geheugenadres) geef wat ik terug krijg van de File.class. Het moet dus wel expliciet gebeuren ( ik kan niet zomaar variabelen benaderen in het geheugen waar geen ruimte voor gereserveerd is)maar dat betekend niet dat ik al mijn variabelen in 1 class alloceer. (erg off topic btw)

Opm2: Primitieven hoeven niet expliciet gealloceerd te worden...Ik weet het het was een grapje :*)

topic kan gesloten worden lijkt me.

[ Voor 12% gewijzigd door yrew op 16-07-2003 11:44 ]

Groetjes


Verwijderd

yrew schreef op 16 juli 2003 @ 11:42:
[...]


Opm1: Ik roep een methode aan van een class (File). Deze methode alloceerd een Array in het geheugen. Stopt er wat in en geeft de REFERENTIE terug. Ik zeg mijnArray = File.getArray waarmee ik mijnArray dus de referentie(het geheugenadres) geef wat ik terug krijg van de File.class. Het moet dus wel expliciet gebeuren ( ik kan niet zomaar variabelen benaderen in het geheugen waar geen ruimte voor gereserveerd is)maar dat betekend niet dat ik al mijn variabelen in 1 class alloceer. (erg off topic btw)

Opm2: Primitieven hoeven niet expliciet gealloceerd te worden...Ik weet het het was een grapje :*)

topic kan gesloten worden lijkt me.
Waarom maak je eigenlijk gebruik van een array? Das wel lastig (is niet dynamisch enzo). Maak toch gewoon gebruik van een ArrayList of een Vector. Daar hoef je niet te zeggen hoelang die is. Het enige is dat je moet Type-casten als je dingen eruit haalt, verder is het ideaal.

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 19-08 23:13
Waarom maak je eigenlijk gebruik van een array? Das wel lastig (is niet dynamisch enzo). Maak toch gewoon gebruik van een ArrayList of een Vector. Daar hoef je niet te zeggen hoelang die is. Het enige is dat je moet Type-casten als je dingen eruit haalt, verder is het ideaal.
Omdat de methode listFiles() van java.io.File een array teruggeeft ...
Pagina: 1