-1

2 つの .data ファイルから Java プログラムにデータを読み込むシステムをセットアップする際に、いくつかの問題が発生しています...

IDE として Eclipse を使用しており、使用したい 2 つの .data ファイルがあるフォルダーにプロジェクトを作成しました。私はこのプロジェクトを始めたばかりなので、まだ始まったばかりです...

2 つの .data ファイルは car.data と owner.data で、プロジェクトを開始するために必要なものはこれだけです。

いくつかのクラスを作成しました: Owner.java、Car.java、および ReadFile.java (.data ファイルからデータを読み取るため)。

現在、Owner.java ファイルは次のようになっています。

import java.io.*;

public class Owner {

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    ReadFile rf = new ReadFile("Owner.data");
    rf.read("Owner.data");

}
File f;
public String id;
public String lastName;
public String firstName;
public String street;
public String city;

public void readOwner() throws FileNotFoundException{
    //File f = new File("Smart Stream Associate Software Engineer (Java) - Bristol/assessment/src/Owner.java");
    //InputStream IS = new FileInputStream(f);
}

}

私の Car.java ファイルは次のようになります。

public class Order {

public String orderID;
public String orderNo;
public String personID;


}

私の ReadFile.java ファイルは次のようになります。

import java.io.*;

public class ReadFile {
String[] columns = new String[]{"personID", "lastName", "firstName", "street", "city"};
String[] data = new String[100];

public void read() throws IOException{
    FileReader fr = new FileReader("Person.data");
    BufferedReader br = new BufferedReader(fr);
    String line;

    int i = 0;
    while((line = br.readLine())!= null){
        data[i] = line;
        System.out.println(data[i]);
        i++;
    }
    br.close();

    String[] dataNew = new String[i];
    System.arraycopy(data, 0, dataNew, 0, i);
    data = dataNew;
    System.out.println("Data length: " + data.length);
}
}

現在、Owner.java クラス (メイン メソッドがある場所) からプログラムを実行しようとすると、次のような例外が発生します。

Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
The constructor ReadFile(String) is undefined
The method read() in the type ReadFile is not applicable for the arguments (String)

それが不平を言っている行は次の行です:

ReadFile rf = new ReadFile("Owner.data");

なぜこの例外が発生するのか、それを回避するために何をするのを忘れたのか、誰かが指摘してもらえますか? よろしくお願いします。

編集 2013/09/25

そこで、以下の @sushain97 によって提案された変更を反映するようにコードを編集してみました。これで、次のような 'Owner.java クラスが作成されました。

import java.io.*;

public class Person {

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    ReadFile rf = new ReadFile("Owner.data");
    rf.read();

}
File f;
public String id;
public String lastName;
public String firstName;
public String street;
public String city;

public void readPerson() throws FileNotFoundException{
    //File f = new File("Smart Stream Associate Software Engineer (Java) - Bristol/assessment/src/Person.java");
    //InputStream IS = new FileInputStream(f);
}

}

そして、次のような ReadFile.java クラス:

import java.io.*;

public class ReadFile {
//File file;
String[] columns = new String[]{"personID", "lastName", "firstName", "street", "city"};
String[] data = new String[100];
private File file;


public ReadFile(String fileName){
    this.file = new File(fileName); 
}

public void read() throws IOException{
    FileReader fr = new FileReader(file);
    BufferedReader br = new BufferedReader(fr);
    String line;

    int i = 0;
    while((line = br.readLine())!= null){
        data[i] = line;
        System.out.println(data[i]);
        i++;
    }
    br.close();

    String[] dataNew = new String[i];
    System.arraycopy(data, 0, dataNew, 0, i);
    data = dataNew;
    System.out.println("Data length: " + data.length);
}
}

ただし、Owner.java クラスからコードを実行すると、次のようなエラーが表示されます。

Exception in thread "main" java.io.FileNotFoundException: Owner.data (The system cannot find the file specified)

at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileReader.<init>(Unknown Source)
at ReadFile.read(ReadFile.java:15)
at Person.main(Owner.java:8)

これは、「Owner.data」ファイルが見つからないことを意味すると思いますが、このファイルは「Owner.java」および「ReadFile.java」クラスが保存されているフォルダーと同じフォルダーに保存されています...理由は何かファイルが見つからないのですが、どうすれば確実に見つかりますか?

編集 25/09/2013 @ 09:45

私が理解しているように、PlanetSaroが提案した変更を回答に表示するようにコードを編集したので、次のようになりました。

import java.io.*;
import java.util.Scanner;

public class ReadFile {
static File file;
String[] columns = new String[]{"personID", "lastName", "firstName", "street", "city"};
String[] data = new String[100];

private static void readFile(String fileName){
    try{
        File file = new File("Person.data");
        Scanner scanner = new Scanner(file);
        while(scanner.hasNextLine()){
            System.out.println(scanner.nextLine());
        }
    scanner.close();
    } catch (FileNotFoundException e){
        e.printStackTrace();
    }

}

public void read(File file2) throws IOException{
    FileReader fr = new FileReader("Person.data");
    BufferedReader br = new BufferedReader(fr);
    String line;

    int i = 0;
    while((line = br.readLine())!= null){
        data[i] = line;
        System.out.println(data[i]);
        i++;
    }
    br.close();

    String[] dataNew = new String[i];
    System.arraycopy(data, 0, dataNew, 0, i);
    data = dataNew;
    System.out.println("Data length: " + data.length);
}
}

しかし、私はまだエラーが発生していますException in thread "main" java.io.FileNotFoundException: Owner.data (The system cannot find the file specified)

私はこれがなぜなのか理解できませんか?

編集 2013/09/25 @ 10:35

わかりましたので、これまでに与えられた回答のいずれからもこれを機能させることができないようです(それは、回答を完全に理解していないためかもしれません-その趣旨でコメントしましたので、その場合は、もっと詳しく説明してください (基本的に、私は初心者です)。

ただし、プログラムを実行したときにコンソールに表示されるエラーの量を減らすことができました。私の2つのクラスは次のようになります。

ReadFile.java:

import java.io.*;
import java.util.Scanner;

public class ReadFile {
static File file;
String[] columns = new String[]{"personID", "lastName", "firstName", "street", "city"};
String[] data = new String[100];

private static void readFile(file){
    try{
        File file = new File("D:\\Users\\Elgan Frost\\Desktop\\careers\\Smart Stream Associate Software Engineer (Java) - Bristol\\assessment\\srcPerson.data");
        Scanner scanner = new Scanner(file1);
        while(scanner.hasNextLine()){
            System.out.println(scanner.nextLine());
        }
    scanner.close();
    } catch (FileNotFoundException e){
        e.printStackTrace();
    }

}

public void read(File file2) throws IOException{
    FileReader fr = new FileReader("D:\\Users\\Elgan Frost\\Desktop\\careers\\Smart Stream Associate Software Engineer (Java) - Bristol\\assessment\\srcPerson.data");
    BufferedReader br = new BufferedReader(fr);
    String line;

    int i = 0;
    while((line = br.readLine())!= null){
        data[i] = line;
        System.out.println(data[i]);
        i++;
    }
    br.close();

    String[] dataNew = new String[i];
    System.arraycopy(data, 0, dataNew, 0, i);
    data = dataNew;
    System.out.println("Data length: " + data.length);
}
}

Person.java:

import java.io.*;

public class Person {

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    ReadFile rf = new ReadFile();
    rf.read(ReadFile.file);

}
static File f;
public String id;
public String lastName;
public String firstName;
public String street;
public String city;

public void readPerson() throws FileNotFoundException{
    //File f = new File("Smart Stream Associate Software Engineer (Java) - Bristol/assessment/src/Person.java");
    //InputStream IS = new FileInputStream(f);
}

}

現在、次のようなコンソール エラーが 1 つだけ表示されています。

「スレッド "main" java.lang.Error での例外: 未解決のコンパイルの問題: トークン "file" の構文エラー、VariableDeclaratorId は、このトークン ファイルの後に期待される型に解決できません"

そして、次の行である ReadFile.java の 9 行目について不平を言っています。

private static void readFile(file){

Person.java の 7 行目は、次の行です。

ReadFile rf = new ReadFile();

これがなぜなのか、どうすれば正しくできるのか、誰にもアイデアがありますか?

4

3 に答える 3

0

ReadFileオーバーロードされたコンストラクターをクラス定義に追加する必要があります。デフォルトのコンストラクター (暗黙的で宣言を必要としない) は引数を取りませんが、1 つ、つまりString:を指定しようとしています"Owner.data"

ReadFileこれを修正するには、次のようにカスタム コンストラクターをクラスに追加する必要があります。

public ReadFile(String fileName) //Constructor for a class has the same name as the Class
{
     //Define the fileObject that your read method needs to access to an instance variable
     this.file = new File(fileName); 
}

もちろん、これには変数を宣言する必要があります。

private File file; 

最後に、メソッドfile内のコンストラクターで set にアクセスする必要があります。read

FileReader fr = new FileReader(file); //file here refers to the variable set earlier

したがって、わずかに変更されたReadFileクラスになります。

public class ReadFile {
    String[] columns = new String[]{"personID", "lastName", "firstName", "street", "city"};
    String[] data = new String[100];
    private File file;

    public ReadFile(String fileName) {
     this.file = new File(fileName); 
    }

    public void read() throws IOException {
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;

        int i = 0;
        while((line = br.readLine())!= null){
            data[i] = line;
            System.out.println(data[i]);
            i++;
        }
        br.close();

        String[] dataNew = new String[i];
        System.arraycopy(data, 0, dataNew, 0, i);
        data = dataNew;
        System.out.println("Data length: " + data.length);
    }
}

最後に、使用方法が からrf.read("Owner.data")に変わりrf.read()ます。

于 2013-09-24T17:22:15.013 に答える
0

引数ReadFileを受け入れるコンストラクターを宣言していません。String以下のようなものが必要です。Fileその間に、読み取り時に再利用できるフィールドを追加します。

public class ReadFile {
    private File file;
    public ReadFile(String file) {
        this.file = new File(file);
    }
    ... 
    // use the following in your read() method
    // FileReader fr = new FileReader(file);
}

その後、次のことができます

ReadFile rf = new ReadFile("Owner.data"); // "Owner.data" passed as an argument

次の行でも例外が発生します

rf.read("Owner.data");

read()メソッドも引数を取らないためです。

コンストラクターに渡した値を使用して、読み取り元のファイルを選択します。

于 2013-09-24T17:12:40.307 に答える
0

これは、ReadFile オブジェクトに String 型のコンストラクター引数がなく、メソッド read() に渡された型 string の引数がないためです。

于 2013-09-24T17:15:52.967 に答える