web-dev-qa-db-ja.com

JavaのScannerクラスを使用した.textファイルの読み取り

私はJavaプログラムに取り組んでいます。このプログラムは、テキストファイルを1行ずつ読み取り、それぞれに番号を付け、各番号を配列にスローし、挿入ソートを使用して配列をソートしようとします。プログラムにテキストファイルを読み取らせるのに助けが必要です。

次のエラーメッセージが表示されます。

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)

「src」「bin」およびメインプロジェクトフォルダに.txtファイルのコピーがありますが、それでもファイルが見つかりません。ところで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();
    }
 }
}
43
user12074577

ここにファイル拡張子を入力する必要があります

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

次のコードを使用してファイルを読み取ります

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

}

->このアプリケーションは、ファイルの内容を1行ずつ印刷しています

22

いくつかの実際のテスト済みのメソッドを次に示します。

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


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

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);
        }
    }
}
7
pankaj
  1. ファイル名が正しいことを確認してください(適切な大文字使用、一致する拡張子など-すでに提案したとおり)。

  2. Class.getResource メソッドを使用して、クラスパスでファイルを見つけます-現在のディレクトリに依存しないでください:

    URL url = insertionSort.class.getResource("10_Random");
    
    File file = new File(url.toURI());
    
  3. コマンドライン引数を介して絶対ファイルパスを指定します。

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

Eclipseの場合:

  1. 「実行構成」を選択します
  2. [引数]タブに移動します
  3. 「c:/my/file/is/here/10_Random.txt.or.whatever」を「プログラムの引数」セクションに入れます
6
mvmn

配列に何も入力しないという事実に誰も対処していないようです。読み取られる各intを「i」に設定してから出力します。

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

この効果のために、配列の値を次に読み込まれる整数に設定し続けます。

別のforループでは、配列内の数値を表示できます。

for (int x=0;x< array.length ; x++)
{
    System.out.println("array[x]");
}
2
Vrezh Gulyan
  1. ファイル拡張子を含む正確なファイル名を指定する必要があります。 10_Random.txt
  2. 明示的なパスを一切指定せずに参照する場合、ファイルは実行可能ファイルと同じディレクトリにある必要があります。
  3. 作業中は、intを読む前にintを確認する必要があります。 hasNextLine()でチェックし、nextInt()intを期待することは安全ではありません。 hasNextInt()を使用して、実際に取得するintがあることを確認する必要があります。もちろん、1行に1つの整数を適用することをどの程度厳密に行うかはあなた次第です。
1
Iskar Jarak

どちらかを使用する必要があります

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

または

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

Eclipseのプロジェクトフォルダーに関連。

1
Rajesh Guptan

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

ファイルパスが問題のようです。ファイルが正しいディレクトリに存在することを確認するか、正しいファイルを指していることを確認するために絶対パスを指定してください。 file.getAbsolutePath()をログに記録して、ファイルが正しいことを確認してください。

1
Avijit

読み込むファイルは、指定するファイル名と完全に一致する必要があります。"10_random" not "10_random.txt" not "10_random.blah"ではなく、要求内容と完全に一致する必要があります。どちらかを一致するように変更して、それらが並ぶようにすることができますが、必ず一致するようにしてください。使用しているOSに関係なく、ファイル拡張子を表示すると役立つ場合があります。

また、ファイルの場所については、コンパイルの結果である最終的な実行可能ファイル(.classファイル)と同じ作業ディレクトリ(同じレベル)に配置する必要があります。

0
Kyle Falconer

最初にファイルのアドレスを確認します。これは、.Javaファイルの横、またはclasspath環境変数で定義した任意のアドレスにある必要があります。これを確認したら、以下を試してください。

  1. 例として、Fileオブジェクトコンストラクターの拡張子でファイル名を使用する必要があります。

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

  2. ただし、例として、ファイル名の絶対アドレスを渡すことにより、スキャナーオブジェクト内で使用するより良い方法があります。

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

この方法では、Java.nio.file.Pathsもインポートする必要があります。

0
Amir Maleki