Exception in thread "main" java.lang.NullPointerException

0

Exception in thread "main" java.lang.NullPointerException
at zamtoifs2.Main.newZam(Main.java:62)

public static void newZam() {
String directory = "C:/EBI/import";
File dir = new File(File.separator + directory);
String[] plik = dir.list();

if (plik.length > 0)   -------- w tej lini wywala ten wyjatek.... to jest 62 linia... pomocy
0

można jaśniej bo nie kumam o co chodzi z tym direm ?

0

File dir = new File(File.separator + directory);

File.separator + "C:/..." = "/C:/..."

Czyli do takiej ścieżki się nie dostaniesz na pewno bo masz / przed C

http://docs.oracle.com/javase/1.4.2/docs/api/java/io/File.html#list%28%29
Zobacz sobie co zwraca list.
próbujesz length z pliku wyciągnąć, a plik jest null bo list() zwróciło null, a list() zwróciło null bo masz niepoprawną ścieżkę, co za tym idzie sypnęło CI wyjątkiem

0

A jesli ta sciezka odnosci sie do lokalizacji na serwerze a nie na komputerze osobistym ?

0

<quote="864127">File dir = new File(File.separator + directory);

File.separator + "C:/..." = "/C:/..."

Czyli do takiej ścieżki się nie dostaniesz na pewno bo masz / przed C

Więc jak to zadeklarowac, zeby sciezka wczytywala sie poprawnie
?

0

no wiem rozumiem o co chodzi. Tylko sprawa wyglada tak, ze ten program nie został napisany przeze mnie a zrodło wyciagnalem z pliku jar. I teraz mam problem z jego ponowna kompilacja. Jak w takim razie dostac sie do tej lokalizacji zeby nie wstawiało mi tego " / " przed C ?

0

No bo powyzej napisales, ze tworzy mi niepoprawna sciezke bo dodaje \ przed C i wywala blad bo sciezka jest niepoprawna. Jak zatem uzyskac poprawna sciezke ?

0

wiesz co sprawdzałem juz tak dosłownie 30 minut temu i też wyrzuca ten sam bład ;/

0

String directory = "C:/EBI/import";
    File dir = new File(directory);

    if( ! dir.exists() )
       System.out.println("Katalog nie istnieje");

    String[] plik = dir.list();

co sprawdzenie wyswietli?

0

nie ma takiej sciezki na systemie windows :"C:/EBI/import"
jest natomiast = "C:\EBI\import"
czyli jak bys chcial ja do zmiennej String zapisac, to zrobilbys to prawdopodobnie tak:
String directory = "C:\EBI\import";

0

Z całym szacunkiem dla autora anonima, ale skoro nie wiedział on jak się pozbyć separatora ze ścieżki, to może też gdzie indziej mu ten exception wywala....
Tak czy inaczej sprawa prosta. Tablica Stringów nie jest tworzona i tyle - pewnie źle ścieżka podana, albo takowa nie istnieje LUB file nie jest katalogiem - też list sypnie nulem

0

z całym szacunkiem do kogokolwiek. Ścieżka i wszystko jest ok. Nie mam szans tego skompilować dobrze na swoim komputerze jesli nie mam tych katalogów utworzonych. Te katalogi sa na serwerze wiec program nie " domysli sie " ze tej sciezki bede uzywac na innej jednostce. Sam projekt moge zbudowac i utworzyc Jar tyle ze po podmianie na nowy program nie dziala i wlasnie nie wiem jak ominąc tą dziure w kompilacji zeby wszystko bylo ok

0

Zastanawiam sie czy jak utworze katalogi na swoim kompie tylko w celach kompilacji to czy wszystko zadziala tak samo na katalogach tamtego serwera ? jak myslicie ?

0

No i niestety po podmianie plików program zawiesza sie . Nawet bez zadnych modyfikacji jesli chodzi o skladnie w porównaniu do poprzedniego dzialajacego pliku.masakra.

0

A skompilowałeś to kompilatorem w takiej samej wersji? Pewnie nie...
Moja rada? Odpuść to sobie albo zleć komuś kto ma przynajmniej minimalne pojęcie o programowaniu w javie.

0

Pierwsze słysze o tym ze wersja kompilatora ma wplyw na to czy program sie wykona cyz nie .. pozdro. dziekuje juz za pomoc na tym forum. Jesli byłbym zaawansowanym programista tak jak zacni wielcy, ktorzy tutaj lubia krytykowac to bym nie korzystał z forum. Jesli szukam pomocy na forum, tzn ze potrzebuje pomocy i informacji.

0

I masz racje, poszukaj pomocy tam gdzie CI jej udzielą - w księgarni z literaturą IT np. Jak masz problemy natury co oznacza File.separator + " sciezka" to

  1. Ucz się, ucz się, ucz się długa droga przed Tobą (którą każdy z nas też musiał przejść)
  2. Dział pomyliłeś kolego bo to się nadaje do newbie a nie tutaj
  3. w sumie nie wiem co tu poradzić Tobie jeszcze. Jak masz potrzebę pisz na PW :)

btw. To czy ty masz jakieś katalogi na których ma program pracować czy nie, ma tyle wspólnego w kompilacją maszty radiowe z powodziami.
Cya!

0

@hatersgonahate otóż wersja kompilatora MA znaczenie jeśli rekompilujesz tylko jeden z plików źródłowych i podmieniasz go na pałę. Jak wszystko było kompilowane w 1.5 to ten plik skompilowany w 1.6 nie zadziała.

0

OMG. Ten temat powinien być od początku zostawiony w spokoju, co najwyżej z odpowiedzią, żeby autor zabrał tyłek do księgarni lub biblioteki i wypożyczył sobie pierwszy z brzegu podręcznik do Javy.
Co do tematu, to ścieżka w postaci "C:/EBI/import" jest z d**y wzięta bo nie jest poprawna ani w systemach unixowych, ani w Windows. Nie powoduje wyjątku tylko dlatego, że obsługa plików w starszych bibliotekach Javy jest wyjątkowo marna bo nie wysyła od razu takich bzdur z wyjątkiem.
Dlaczego nie poprawna? Bo C:\ może istnieć jako root wyłącznie w Windows, a separator "/" może istnieć tylko w systemach X. Tak więc "C:/" jest najgłupszym zapisem ścieżki jaki może istnieć.
Dodatkowo skoro ktoś wrzucił konstrukcję typu file.separator+dir, to oznacza, że dir musi być ścieżką względną i każda ścieżka absolutna jest nie do zaakceptowania - a więc również każda zaczynająca się od roota takiego jak C: lub kolejnego '/' (np. C:\aaaaa.sru, /będą2slashe/bye lub niepełna C:jakiśKatalog\podkatalog...). Pewnie kod, którego próbka jest w pierwszym poście jest napisany pod systemy unixowe bo tylko tam root ścieżki absolutnej składa się z pojedynczego '/', a połączenie tego ze ścieżką pochodzącą z Windows, to jakaś bzdura. Dlatego ostatecznie jest walony wyjątek.
I tu nic więcej nie da się dopowiedzieć.

ps. Dopiero w 1.7 rozwiązano częściowo problem z separatorami zależnymi od systemu eliminując składanie ścieżek przez niedouków z palucha moczonego w tyłku. :P

2
Olamagato napisał(a):

Co do tematu, to ścieżka w postaci "C:/EBI/import" jest z d**y wzięta bo nie jest poprawna ani w systemach unixowych, ani w Windows. Nie powoduje wyjątku tylko dlatego, że obsługa plików w starszych bibliotekach Javy jest wyjątkowo marna bo nie wysyła od razu takich bzdur z wyjątkiem.
Dlaczego nie poprawna? Bo C:\ może istnieć jako root wyłącznie w Windows, a separator "/" może istnieć tylko w systemach X. Tak więc "C:/" jest najgłupszym zapisem ścieżki jaki może istnieć.

Przepraszam bardzo, ale z d**y wzięta to jest Twoja wiedza, dla Windows NT jest to całkowicie poprawna ścieżka, nieprawidłowa jedynie dla DOS.

Naming Files, Paths, and Namespaces:

File I/O functions in the Windows API convert "/" to "" as part of converting the name to an NT-style name, except when using the "\?" prefix as detailed in the following sections.

1 użytkowników online, w tym zalogowanych: 0, gości: 1