2012-11-01 5 views
31

Pracuję nad programem w języku Java, który odczytuje plik tekstowy wiersz po wierszu, każdy z numerem, pobiera każdy numer i wstawia go do tablicy, a następnie próbuje i używa wstawiania sortuj, aby posortować tablicę. Potrzebuję pomocy w uzyskaniu programu do odczytu pliku tekstowego.Czytanie pliku .txt przy użyciu klasy Scanner w Javie

ja dostaję następujące komunikaty o błędach:

java.io.FileNotFoundException: 10_Random (The system cannot find the file specified) 
at java.io.FileInputStream.open(Native Method) 
at java.io.FileInputStream.<init>(Unknown Source) 
at java.util.Scanner.<init>(Unknown Source) 
at insertionSort.main(insertionSort.java:14) 

Mam kopię pliku .txt w moim „src” „bin” i głównego folderu projektu, ale nadal nie można znaleźć plik. Używam Eclipse przy okazji.

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class insertionSort { 

public static void main(String[] args) { 

    File file = new File("10_Random"); 

    try { 

     Scanner sc = new Scanner(file); 

     while (sc.hasNextLine()) { 
      int i = sc.nextInt(); 
      System.out.println(i); 
     } 
     sc.close(); 
    } 
    catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 
} 
+2

Spróbuj dodać System.err.println (file.getAbsolutePath()); aby zobaczyć dokładnie, który plik próbujesz przeczytać. –

+1

Nie otwierasz pliku .txt. – eckes

Odpowiedz

40

Musisz umieścić rozszerzenie pliku tutaj

File file = new File("10_Random.txt"); 
0

plik, który odczytuje musi mieć dokładnie taką nazwę pliku należy podać: "10_random" nie „10_random.txt” nie „10_random.blah”, to musi dokładnie pasować do tego, o co prosisz. Możesz zmienić jeden, aby dopasować, tak aby były wyrównane, ale po prostu upewnij się, że tak. Może pomóc wyświetlić rozszerzenia plików w dowolnym systemie operacyjnym, z którego korzystasz.

Ponadto, dla lokalizacji pliku, musi znajdować się w katalogu roboczym (ten sam poziom) co końcowy plik wykonywalny (plik .class) będący wynikiem kompilacji.

1
  1. Potrzebujesz podać dokładną nazwę pliku, w tym rozszerzenie pliku, np. 10_Random.txt.
  2. Plik musi znajdować się w tym samym katalogu co plik wykonywalny, jeśli chcesz się do niego odwoływać bez jakiejkolwiek jawnej ścieżki.
  3. Podczas, gdy jesteśmy na tym etapie, przed przeczytaniem int należy sprawdzić, czy nie jest to int. Nie jest bezpiecznie sprawdzić pod numerem hasNextLine(), a następnie oczekiwać na int z nextInt(). Powinieneś użyć hasNextInt(), aby sprawdzić, czy rzeczywiście istnieje int do pobrania. To, jak ściśle zdecydujesz się egzekwować jedną liczbę całkowitą na regułę liniową, zależy oczywiście od Ciebie.
4
  1. Upewnij się, że nazwa pliku jest poprawna (właściwa wielkość liter, dopasowując przedłużenie etc - jak już sugerowane).

  2. Zastosowanie metody Class.getResource aby znaleźć plik w ścieżce klasy - nie należy polegać na bieżącym katalogu:

    URL url = insertionSort.class.getResource("10_Random"); 
    
    File file = new File(url.toURI()); 
    
  3. określić bezwzględną ścieżkę do pliku za pomocą argumentów wiersza poleceń:

    File file = new File(args[0]); 
    

w Eclipse:

  1. Wybierz konfiguracje "Run"
  2. Przejdź do zakładki "argumentami"
  3. umieścić swoje „C: /my/file/is/here/10_Random.txt.or.cokolwiek”do«argumentów aplikacji»
+0

+1 za sugerowanie zarówno sposobu radzenia sobie ze ścieżką w odpowiedni sposób, jak i lepszego sposobu (args) w ogóle do wykonania tego zadania. Mógłbyś też wspomnieć o 'try catch' dla obsługi nieudanego otwarcia pliku. –

15

używać następujących kodów do odczytu pliku

import java.io.File; 
import java.util.Scanner; 

public class ReadFile { 

    public static void main(String[] args) { 

     try { 
      System.out.print("Enter the file name with extension : "); 

      Scanner input = new Scanner(System.in); 

      File file = new File(input.nextLine()); 

      input = new Scanner(file); 


      while (input.hasNextLine()) { 
       String line = input.nextLine(); 
       System.out.println(line); 
      } 
      input.close(); 

     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } 
    } 

} 

-> Ta aplikacja drukuje linię zawartość pliku po linii

2

Nikt nie wydaje się mieć zwróciłem uwagę na to, że nie wpisujesz niczego w tablicy, ustawiasz każde int, które jest czytane na "i", a następnie wyprowadzasz je.Coś takiego skutkuje ustawianiem wartości tablicy na wartość do przeczytanej najbliższej liczby całkowitej.

Niż inna pętla może wyświetlać liczby w tablicy.

for (int x=0;x< array.length ; x++) 
{ 
    System.out.println("array[x]"); 
} 
1

Path Plik wydaje się być problemem tutaj upewnij się, że istnieje plik w odpowiednim katalogu lub podać ścieżkę bezwzględną, aby upewnić się, że są skierowane do właściwego pliku. Zapisz plik file.getAbsolutePath(), aby sprawdzić, czy plik jest prawidłowy.

2

Oto niektóre działające i sprawdzone metody;

using Scanner

package io; 

import java.io.File; 
import java.util.Scanner; 

public class ReadFromFileUsingScanner { 
    public static void main(String[] args) throws Exception { 
     File file=new File("C:\\Users\\pankaj\\Desktop\\test.java"); 
     Scanner sc=new Scanner(file); 
     while(sc.hasNextLine()){ 
      System.out.println(sc.nextLine()); 
     } 
    } 
} 


Oto kolejny sposób odczytać cały plik (bez pętli) używając Scanner klasę

package io; 

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class ReadingEntireFileWithoutLoop { 
    public static void main(String[] args) throws FileNotFoundException { 
     File file=new File("C:\\Users\\pankaj\\Desktop\\test.java"); 
     Scanner sc=new Scanner(file); 
     sc.useDelimiter("\\Z"); 
     System.out.println(sc.next()); 
    } 
} 

użyciu BufferedReader

package io; 
import java.io.*; 
public class ReadFromFile2 { 
    public static void main(String[] args)throws Exception { 
     File file=new File("C:\\Users\\pankaj\\Desktop\\test.java"); 
     BufferedReader br=new BufferedReader(new FileReader(file)); 
     String st; 
     while((st=br.readLine())!=null){ 
      System.out.println(st); 
     } 
    } 
} 

using FileReader

package io; 
import java.io.*; 
public class ReadingFromFile { 
    public static void main(String[] args) throws Exception { 
     FileReader fr=new FileReader("C:\\Users\\pankaj\\Desktop\\test.java"); 
     int i; 
     while((i=fr.read())!=-1){ 
      System.out.print((char) i); 
     } 
    } 
} 
0

Najpierw sprawdź adres pliku, musi być obok pliku .java lub dowolnego adresu, które można zdefiniować w classpath zmiennej środowiskowej. Po sprawdzeniu tego, spróbuj poniżej.

  1. należy użyć nazwy pliku przez to rozszerzenie w konstruktorze obiektu File, jako przykład:

    File myFile = new File("test.txt");

  2. ale istnieje lepszy sposób na wykorzystanie go wewnątrz obiektu skaner przekazać Nazwa pliku adres bezwzględny, na przykład jako:

    Scanner sc = new Scanner(Paths.get("test.txt"));

w ten sposób należy również importować java.nio.file.Paths.

1

private void loaddata() {

Scanner scanner = null; 
    try { 
     scanner = new Scanner(new File(getFileName())); 
     while (scanner.hasNextLine()) { 
      Scanner lijnScanner = new Scanner(scanner.nextLine()); 

      lijnScanner.useDelimiter(";"); 
      String stadVan = lijnScanner.next(); 
      String stadNaar = lijnScanner.next(); 
      double km = Double.parseDouble(lijnScanner.next()); 

      this.voegToe(new TweeSteden(stadVan, stadNaar), km); 

     } 
    } catch (FileNotFoundException e) { 
     throw new DbException(e.getMessage(), e); 
    } finally { 
     if(scanner != null){ 
      scanner.close(); 
     } 
    } 
} 
0

Należy użyć jednej

File file = new File("bin/10_Random.txt"); 

Albo

File file = new File("src/10_Random.txt"); 

względna do folderu projektu w Eclipse.