Mam problemy z tworzeniem klasy, która może czytać i drukować z pliku. Wygląda na to, że nazwa pliku przekazana do konstruktora nie jest faktycznie przypisana do zmiennej fileName, lub może robię coś nie tak z obiektami File and Scanner. Naprawdę nie wiem, co jest nie tak i jak to naprawić. Jestem początkującym i po prostu przykrywam używanie plików w mojej klasie, więc prawdopodobnie brakuje mi czegoś oczywistego. Dziękuję za pomoc, którą każdy może dać :)Jak utworzyć klasę, która akceptuje nazwę pliku i może wydrukować jej zawartość?
Oto mój kod i instrukcje dotyczące zadania poniżej.
Zadanie było:
Napisz klasę o nazwie FileDisplay z następujących metod:
konstruktor: Przyjmuje nazwa pliku jako argument
displayHead: Ta metoda powinna wyświetlić tylko pierwsze pięć linii zawartości pliku. Jeśli plik zawiera mniej niż pięć linii, powinien wyświetlić całą zawartość pliku.
displayContents: Ta metoda powinna wyświetlić całą zawartość pliku, którego nazwa została przekazana do konstruktora.
- displayWithLineNumbers: Ta metoda powinna wyświetlić zawartość pliku, którego nazwę przekazano do konstruktora. Każda linia powinna być poprzedzona numerem linii, a następnie dwukropkiem. Numeracja linii powinna rozpocząć w 1.
Mój kod:
import java.io.*;
import java.util.Scanner;
public class FileDisplay {
// just using little random .txt files to test it
private String fileName = "example1.txt";
public FileDisplay(String fileName) throws IOException {
this.fileName = fileName;
}
File file = new File(fileName);
Scanner inputFile = new Scanner(file);
// displays first 5 lines of file
public void displayHead() {
for (int x = 0; x < 5 && inputFile.hasNext(); x++) {
System.out.println(" " + inputFile.nextLine());
}
}
//displays whole file
public void displayContents() {
while (inputFile.hasNext()) {
System.out.println(" " + inputFile.nextLine());
}
}
// displays whole file with line numbers
public void displayWithLineNumbers() {
while (inputFile.hasNext()) {
int x = 1;
System.out.println(x + ": " + inputFile.nextLine());
x++;
}
}
@Override
public String toString() {
return "FileDisplay [someFile=" + fileName + "]";
}
}
Ja też napisałem aplikację sterownika aby sprawdzić, czy klasa pracuje czy nie:
import java.io.*;
public class FileDisplayTest {
public static void main(String[] args) throws IOException {
PrintWriter ex1 = new PrintWriter("example1.txt");
ex1.println("apple");
ex1.println("pear");
ex1.println("grape");
ex1.close();
FileDisplay test = new FileDisplay("example1.txt");
test.displayContents();
System.out.println(test.toString());
}
}
Spróbuj umieścić "Plik pliku = nowy plik (nazwa pliku); Scanner inputFile = new Scanner (plik); 'wewnątrz konstruktora lub nie będą używać wybranej nazwy pliku. – Berger