java - txt - ¿Cómo hago una clase que acepte un nombre de archivo y pueda imprimir su contenido?
obtener el nombre de una variable en java (1)
Tu problema está aquí:
File file = new File(fileName);
Esa declaración está fuera de tu constructor.
Se ejecuta antes de que el constructor entre en acción. Por lo tanto, el objeto de archivo se crea con el nombre incorrecto (¡predeterminado!). (mira aquí para leer más)
El mejor enfoque aquí: haga que sus campos sean definitivos , y use "constructor telescoping"; Me gusta esto:
private final String fileName;
private final Scanner scanner;
public FileDisplay() {
this("default.txt");
}
public FileDisplay(String fileName) {
this.fileName = fileName;
this.scanner = new Scanner(new File(fileName));
}
Y ahora el compilador lo ayuda a asegurarse de que sus campos se inicialicen exactamente una vez, en el orden en que los dejó una vez en su constructor. Y tu habilidad tiene la oportunidad de crear un objeto FileDisplay usando algún nombre de archivo "predeterminado" (donde, en realidad: recomendaría no hacerlo).
Tengo problemas para crear una clase que pueda leer e imprimir desde un archivo. Parece que el nombre del archivo pasado al constructor no se está asignando a la variable fileName, o tal vez estoy haciendo algo mal con los objetos File y Scanner. Realmente no sé lo que está mal o cómo solucionarlo. Soy un principiante y acabo de cubrir el uso de archivos en mi clase, por lo que probablemente me esté perdiendo algo obvio. Gracias por cualquier ayuda que cualquiera pueda dar :)
Aquí está todo mi código y las instrucciones para la tarea a continuación.
La tarea fue:
Escriba una clase llamada FileDisplay con los siguientes métodos:
constructor: acepta el nombre del archivo como argumento
displayHead: este método debería mostrar solo las primeras cinco líneas del contenido del archivo. Si el archivo contiene menos de cinco líneas, debe mostrar los contenidos completos del archivo.
displayContents: este método debe mostrar todo el contenido del archivo, cuyo nombre se pasó al constructor.
- displayWithLineNumbers: Este método debe mostrar el contenido del archivo, cuyo nombre se pasó al constructor. Cada línea debe ir precedida de un número de línea seguido de dos puntos. La numeración de líneas debe comenzar en 1.
Mi código:
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 + "]";
}
}
También escribí una aplicación de controlador para probar si la clase estaba funcionando o no:
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());
}
}