2012-11-01 16 views
31

Sto lavorando su un programma Java che legge un file di testo riga per riga, ognuno con un numero, prende ogni numero lo getta in un array, quindi cerca e usa l'inserimento ordina per ordinare l'array. Ho bisogno di aiuto per far sì che il programma legga il file di testo.Lettura di un file .txt utilizzando la classe Scanner in Java

Sto ottenendo i seguenti messaggi di errore:

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) 

ho una copia del file .txt nel mio "src" "bin" e la cartella di progetto principale, ma ancora non riesco a trovare il file. A proposito, sto usando Eclipse.

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

Prova ad aggiungere System.err.println (file.getAbsolutePath()); per vedere esattamente quale file cerchi di leggere. –

+1

Non si apre un file .txt. – eckes

risposta

40

bisogna mettere estensione del file qui

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

Il file leggere deve avere esattamente il nome del file specificato: "10_random" non "10_random.txt" non "10_random.blah", è deve corrispondere esattamente a quello che stai chiedendo. Puoi cambiare uno dei due in modo che si allinei, ma sii sicuro che lo facciano. Potrebbe essere utile mostrare le estensioni dei file in qualsiasi sistema operativo in uso.

Inoltre, per la posizione del file, deve trovarsi nella directory di lavoro (stesso livello) dell'eseguibile finale (il file .class) che è il risultato della compilazione.

1
  1. È necessario specificare il nome file esatto, inclusa l'estensione del file, ad es. 10_Random.txt.
  2. Il file deve essere nella stessa directory dell'eseguibile se si desidera fare riferimento ad esso senza alcun tipo di percorso esplicito.
  3. Mentre ci siamo, è necessario verificare lo int prima di leggere uno int. Non è sicuro verificare con hasNextLine() e quindi aspettarsi un int con nextInt(). Dovresti usare hasNextInt() per verificare che ci sia effettivamente uno int da afferrare. Ovviamente, quanto rigorosamente decidi di imporre l'unica regola per riga per te.
4
  1. Assicurarsi che il nome del file sia corretta (corretta capitalizzazione, corrispondenti estensione ecc - come già suggerito).

  2. Utilizzare il metodo Class.getResource per individuare il file nel percorso di classe - non fare affidamento sulla directory corrente:

    URL url = insertionSort.class.getResource("10_Random"); 
    
    File file = new File(url.toURI()); 
    
  3. Specificare il percorso di file assoluto tramite gli argomenti della riga di comando:

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

In Eclipse:

  1. Scegliere "configurazioni Run"
  2. Vai alla scheda "Argomenti"
  3. Metti la tua "c: /my/file/is/here/10_Random.txt.or.qualunque" in 'argomenti del programma'
+0

+1 per suggerire sia un modo per affrontare correttamente il percorso sia un modo migliore (arg) per svolgere questo compito. Si potrebbe citare un 'try catch' per la gestione del fallimento di aprire il file pure. –

15

Usa seguenti codici per leggere il file

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(); 
     } 
    } 

} 

-> Questa applicazione è la stampa della linea di contenuto del file per riga

2

Nessuno sembra avere ha risposto al fatto che non stai inserendo nulla in un array a tutti: stai impostando ogni int che viene letto su "i" e poi lo emette

Qualcosa a questo effetto manterrà i valori di impostazione della matrice sul successivo numero intero letto.

Rispetto a un altro ciclo, è possibile visualizzare i numeri nell'array.

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

File Path Sembra essere un problema qui si prega di assicurarsi che il file esiste nella directory corretta o dare il percorso assoluto per assicurarsi che si punta ad un file corretto. Si prega di registrare il file.getAbsolutePath() per verificare che il file sia corretto.

2

ecco alcuni metodi funzionanti e testati;

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()); 
     } 
    } 
} 


Ecco un altro modo per leggere l'intero file (senza anello) utilizzando Scanner classe

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()); 
    } 
} 

utilizzando 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

In un primo momento controllare l'indirizzo del file, deve essere accanto al tuo file di .java o in qualsiasi indirizzo che si definisce in classpath variabile di ambiente. Quando controlli questo, prova qui sotto.

  1. è necessario utilizzare un nome di file da esso è un'estensione nel costruttore oggetto File, ad esempio:

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

  2. ma c'è un modo migliore per utilizzarlo all'interno oggetto Scanner dal passare la nome indirizzo assoluto, ad esempio:

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

in questo modo è necessario importare java.nio.file.Paths pure.

1

loadData private void() {

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

Si consiglia di utilizzare uno

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

O

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

relativo alla cartella di progetto in Eclipse.

Problemi correlati