私は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();
}
}
}
ここにファイル拡張子を入力する必要があります
File file = new File("10_Random.txt");
次のコードを使用してファイルを読み取ります
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行ずつ印刷しています
いくつかの実際のテスト済みのメソッドを次に示します。
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);
}
}
}
ファイル名が正しいことを確認してください(適切な大文字使用、一致する拡張子など-すでに提案したとおり)。
Class.getResource
メソッドを使用して、クラスパスでファイルを見つけます-現在のディレクトリに依存しないでください:
URL url = insertionSort.class.getResource("10_Random");
File file = new File(url.toURI());
コマンドライン引数を介して絶対ファイルパスを指定します。
File file = new File(args[0]);
Eclipseの場合:
配列に何も入力しないという事実に誰も対処していないようです。読み取られる各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]");
}
10_Random.txt
。int
を読む前にint
を確認する必要があります。 hasNextLine()
でチェックし、nextInt()
でint
を期待することは安全ではありません。 hasNextInt()
を使用して、実際に取得するint
があることを確認する必要があります。もちろん、1行に1つの整数を適用することをどの程度厳密に行うかはあなた次第です。どちらかを使用する必要があります
File file = new File("bin/10_Random.txt");
または
File file = new File("src/10_Random.txt");
Eclipseのプロジェクトフォルダーに関連。
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();
}
}
}
ファイルパスが問題のようです。ファイルが正しいディレクトリに存在することを確認するか、正しいファイルを指していることを確認するために絶対パスを指定してください。 file.getAbsolutePath()をログに記録して、ファイルが正しいことを確認してください。
読み込むファイルは、指定するファイル名と完全に一致する必要があります。"10_random"
not "10_random.txt" not "10_random.blah"ではなく、要求内容と完全に一致する必要があります。どちらかを一致するように変更して、それらが並ぶようにすることができますが、必ず一致するようにしてください。使用しているOSに関係なく、ファイル拡張子を表示すると役立つ場合があります。
また、ファイルの場所については、コンパイルの結果である最終的な実行可能ファイル(.classファイル)と同じ作業ディレクトリ(同じレベル)に配置する必要があります。
最初にファイルのアドレスを確認します。これは、.Java
ファイルの横、またはclasspath
環境変数で定義した任意のアドレスにある必要があります。これを確認したら、以下を試してください。
例として、Fileオブジェクトコンストラクターの拡張子でファイル名を使用する必要があります。
File myFile = new File("test.txt");
ただし、例として、ファイル名の絶対アドレスを渡すことにより、スキャナーオブジェクト内で使用するより良い方法があります。
Scanner sc = new Scanner(Paths.get("test.txt"));
この方法では、Java.nio.file.Paths
もインポートする必要があります。