Een .txt-bestand lezen met behulp van Scanner Class in Java

Ik werk aan een Java-programma dat een Tekstbestand Line-by-line leest, elk met een cijfer, neemt elk nummer het in een array en probeert vervolgens het invoegen van inserties en gebruik deze om de array te sorteren. Ik heb hulp nodig bij het krijgen van het programma om het tekstbestand te lezen.

Ik krijg de volgende foutmeldingen:

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)

Ik heb een kopie van het .txt-bestand in mijn “SRC” “BIN” en hoofdprojectmap, maar het kan het bestand nog steeds niet vinden. Ik gebruik de Eclipse trouwens.

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

Antwoord 1, Autoriteit 100%

U moet hier de bestandsuitbreiding plaatsen

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

Antwoord 2, Autoriteit 36%

Gebruik de volgende codes om het bestand

te lezen

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

-> Deze applicatie drukt de inhoud van het bestand regel voor regel af


Antwoord 3, autoriteit 13%

hier zijn enkele werkende en geteste methoden;

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

Hier is een andere manier om het hele bestand (zonder lus) te lezen met de klasse Scanner

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

met behulp van 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);
        }
    }
}

Antwoord 4, autoriteit 10%

  1. Zorg ervoor dat de bestandsnaam correct is (juist hoofdlettergebruik, overeenkomende extensie enz. – zoals al gesuggereerd).

  2. Gebruik de Class.getResourcemethode om uw bestand in het klassenpad te vinden – vertrouw niet op de huidige map:

    URL url = insertionSort.class.getResource("10_Random");
    File file = new File(url.toURI());
    
  3. Geef het absolute bestandspad op via opdrachtregelargumenten:

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

In Eclipse:

  1. Kies “Configuraties uitvoeren”
  2. Ga naar het tabblad ‘Argumenten’
  3. Zet uw “c:/my/file/is/here/10_Random.txt.or.whatever” in het gedeelte “Programma-argumenten”

Antwoord 5, autoriteit 3%

  1. U moet de exacte bestandsnaam specificeren, inclusief de bestandsextensie, b.v. 10_Random.txt.
  2. Het bestand moet in dezelfde map staan als het uitvoerbare bestand als je ernaar wilt verwijzen zonder enig expliciet pad.
  3. Terwijl we toch bezig zijn, moet je controleren op een intvoordat je een intleest. Het is niet veilig om te controleren met hasNextLine()en dan een intte verwachten met nextInt(). Je moet hasNextInt()gebruiken om te controleren of er daadwerkelijk een intis om te pakken. Hoe strikt u ervoor kiest om de regel van één geheel getal per regel af te dwingen, is natuurlijk aan u.

Antwoord 6, autoriteit 3%

Niemand lijkt te hebben gereageerd op het feit dat je helemaal niets in een array invoert. U stelt elke int die wordt gelezen op “i” en voert deze vervolgens uit.

for (int i =0 ; sc.HasNextLine();i++)
{
    array[i] = sc.NextInt();
}

Iets in deze richting zorgt ervoor dat de waarden van de array worden ingesteld op het volgende gehele getal dat wordt gelezen.

Dan kan een andere for-lus de getallen in de array weergeven.

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

Antwoord 7

Bestandspad Het lijkt hier een probleem te zijn. Zorg ervoor dat het bestand in de juiste map staat of geef het absolute pad op om er zeker van te zijn dat u naar een correct bestand verwijst.
Log het bestand.getAbsolutePath() in om te controleren of het bestand correct is.


Antwoord 8

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

Antwoord 9

U moet een van beide gebruiken

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

Of

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

In verhouding tot de projectmap in Eclipse.


Antwoord 10

Het bestand dat u inleest, moet exact de bestandsnaam hebben die u opgeeft: "10_random"niet “10_random.txt” niet “10_random.blah”, het moet exact overeenkomen met wat u vraagt. Je kunt een van beide aanpassen zodat ze op één lijn liggen, maar zorg ervoor dat ze dat doen. Het kan helpen om de bestandsextensies te tonen in welk besturingssysteem je ook gebruikt.

Ook voor de bestandslocatie moet het zich in de werkdirectory (op hetzelfde niveau) bevinden als het uiteindelijke uitvoerbare bestand (het .class-bestand) dat het resultaat is van de compilatie.


Antwoord 11

Controleer eerst het bestandsadres, het moet naast uw .java-bestand staan of in een adres dat u definieert in de omgevingsvariabele classpath. Als je dit aanvinkt, probeer het dan hieronder.

  1. u moet een bestandsnaam met zijn extensie gebruiken in de bestandsobjectconstructor, als voorbeeld:

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

  2. maar er is een betere manier om het in het Scanner-object te gebruiken door het absolute adres van de bestandsnaam door te geven, als voorbeeld:

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

op deze manier moet u ook java.nio.file.Pathsimporteren.


Antwoord 12

Trouwens, het is de moeite waard om ook de tekencodering in te stellen:

Scanner scanner = new Scanner(new File("C:\\tmp\\edit1.txt"), "UTF-16");

Other episodes