逐行读取文件夹中的所有 .txt 文件
Read all .txt files in a folder line by line
现在我正在处理一个不断在文件夹中查找 .txt 文件的线程。一旦找到文件,它应该逐行读取内容(使用缓冲 reader 和拆分(分隔符)最终将此数据插入数据库)。
事情发生在我的代码寻找具有特定名称的特定文件之前,它工作得很好,但后来我的教授告诉我程序需要在文件夹中寻找任何 .txt 文件。所以我添加了一些代码来执行此操作并尝试使其与我的旧代码一起使用。
我认为以下几行不起作用:
FileReader fr = new FileReader(fileList[i]);
BufferedReader b = new BufferedReader(fr);
我遇到的错误是捕获 - 找不到文件异常 e。
好的,这是我的代码! :D
public void run() {
while (true) {
try {
Thread.sleep(20000);
boolean flag = false;
try {
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String fileName) {
return fileName.endsWith("txt");
}
};
File f = new File("D:\Mis Documentos\");
String[] fileList = f.list(filter);
for (int i = 0; i < fileList.length; i++) {
System.out.println(fileList[i]);
FileReader fr = new FileReader(fileList[i]);
BufferedReader b = new BufferedReader(fr);
String cadena = b.readLine();
Validaciones v = new Validaciones();
if (cadena == null) {
JOptionPane.showMessageDialog(null, "El fichero está vacío");
} else {
while (cadena != null) {
String[] fields = cadena.split(SEPARATOR);
EntidadDAO ed = new EntidadDAODB();
Entidad ent = new Contacto();
if (fields.length == 7) {
// System.out.println("fields es 7");
for (int i2 = 0; i2 < fields.length; i2++) {
nombre = fields[0];
apellido = fields[1];
alias = fields[2];
direccion = fields[3];
telefono = fields[4];
nacimiento = fields[5];
email = fields[6];
}
if (v.validarThread(nacimiento, email, telefono) == true) {
System.out.println("El contacto " + nombre + " se validó correctamente");
} else {
System.out.println("No se pudo cargar el contacto " + nombre + ". Error al validar los datos.");
cadena = b.readLine();
continue;
}
((Contacto) ent).setNombre(nombre);
((Contacto) ent).setApellido(apellido);
((Contacto) ent).setAlias(alias);
((Contacto) ent).setDireccion(direccion);
((Contacto) ent).setTelefono(telefono);
((Contacto) ent).setNacimiento(nacimiento);
((Contacto) ent).setEmail(email);
((Contacto) ent).setFavorito("no");
// System.out.println(ent.toString());
// ed.agregarEntidad(ent);
cadena = b.readLine();
} else {
System.out.println("No se pudo cargar el contacto " + nombre + ". Faltan datos.");
cadena = b.readLine();
}
}
}
b.close();
// moverFichero();
} // aca termina el for que lee cada archivo txt.
} catch (FileNotFoundException e) {
System.out.println("No se encontró el fichero");
} catch (Exception e) {
System.out.println("Ocurrió un error al leer o cerrar el fichero" + e);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
System.out.println("Error al ejecutar thread");
}
}
}
问题是您只传递 FileReader
的文件名
FileReader fr = new FileReader(fileList[i]);
给出该文件的完整路径
FileReader fr = new FileReader("D:\Mis Documentos\"+fileList[i]);
现在我正在处理一个不断在文件夹中查找 .txt 文件的线程。一旦找到文件,它应该逐行读取内容(使用缓冲 reader 和拆分(分隔符)最终将此数据插入数据库)。
事情发生在我的代码寻找具有特定名称的特定文件之前,它工作得很好,但后来我的教授告诉我程序需要在文件夹中寻找任何 .txt 文件。所以我添加了一些代码来执行此操作并尝试使其与我的旧代码一起使用。
我认为以下几行不起作用:
FileReader fr = new FileReader(fileList[i]);
BufferedReader b = new BufferedReader(fr);
我遇到的错误是捕获 - 找不到文件异常 e。
好的,这是我的代码! :D
public void run() {
while (true) {
try {
Thread.sleep(20000);
boolean flag = false;
try {
FilenameFilter filter = new FilenameFilter() {
public boolean accept(File dir, String fileName) {
return fileName.endsWith("txt");
}
};
File f = new File("D:\Mis Documentos\");
String[] fileList = f.list(filter);
for (int i = 0; i < fileList.length; i++) {
System.out.println(fileList[i]);
FileReader fr = new FileReader(fileList[i]);
BufferedReader b = new BufferedReader(fr);
String cadena = b.readLine();
Validaciones v = new Validaciones();
if (cadena == null) {
JOptionPane.showMessageDialog(null, "El fichero está vacío");
} else {
while (cadena != null) {
String[] fields = cadena.split(SEPARATOR);
EntidadDAO ed = new EntidadDAODB();
Entidad ent = new Contacto();
if (fields.length == 7) {
// System.out.println("fields es 7");
for (int i2 = 0; i2 < fields.length; i2++) {
nombre = fields[0];
apellido = fields[1];
alias = fields[2];
direccion = fields[3];
telefono = fields[4];
nacimiento = fields[5];
email = fields[6];
}
if (v.validarThread(nacimiento, email, telefono) == true) {
System.out.println("El contacto " + nombre + " se validó correctamente");
} else {
System.out.println("No se pudo cargar el contacto " + nombre + ". Error al validar los datos.");
cadena = b.readLine();
continue;
}
((Contacto) ent).setNombre(nombre);
((Contacto) ent).setApellido(apellido);
((Contacto) ent).setAlias(alias);
((Contacto) ent).setDireccion(direccion);
((Contacto) ent).setTelefono(telefono);
((Contacto) ent).setNacimiento(nacimiento);
((Contacto) ent).setEmail(email);
((Contacto) ent).setFavorito("no");
// System.out.println(ent.toString());
// ed.agregarEntidad(ent);
cadena = b.readLine();
} else {
System.out.println("No se pudo cargar el contacto " + nombre + ". Faltan datos.");
cadena = b.readLine();
}
}
}
b.close();
// moverFichero();
} // aca termina el for que lee cada archivo txt.
} catch (FileNotFoundException e) {
System.out.println("No se encontró el fichero");
} catch (Exception e) {
System.out.println("Ocurrió un error al leer o cerrar el fichero" + e);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
System.out.println("Error al ejecutar thread");
}
}
}
问题是您只传递 FileReader
FileReader fr = new FileReader(fileList[i]);
给出该文件的完整路径
FileReader fr = new FileReader("D:\Mis Documentos\"+fileList[i]);