【发布时间】:2018-12-15 02:54:03
【问题描述】:
现在我正在处理一个不断在文件夹中查找 .txt 文件的线程。一旦找到文件,它应该逐行读取内容(使用缓冲读取器和拆分(分隔符)最终将这些数据插入数据库)。
事情是在我的代码正在寻找具有特定名称的特定文件之前,它运行良好,但后来我的教授告诉我,程序需要在文件夹中查找任何 .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");
}
}
}
【问题讨论】:
-
我现在没有电脑来解决您的代码问题;但是,尝试更改行 String cadena = b.readLine();作为字符串 = "";然后上线 while (cadena != null) { ,请尝试改成 while (String cadena = b.readline()) != null) {.
-
看来你有很多 cadena = b.readLine();在您的代码中可以删除。您是否尝试在您认为错误所在的位置添加断点并单步执行代码?
标签: java multithreading csv bufferedreader filereader