Para buscar una cadena en un archivo y escribir las líneas con cadena coincidente en otro archivo se tarda 15 - 20 minutos por un único archivo zip de 70 MB (estado comprimido). ¿Hay alguna forma de minimizarlo?Buscar una cadena en un archivo y escribir las líneas coincidentes a otro archivo en Java
mi código fuente:
conseguir las entradas del archivo Zip
zipFile = new ZipFile(source_file_name);
entries = zipFile.entries();
while (entries.hasMoreElements())
{ ZipEntry entry = (ZipEntry)entries.nextElement();
if (entry.isDirectory())
{
continue;
}
searchString(Thread.currentThread(),entry.getName(), new BufferedInputStream (zipFile.getInputStream(entry)), Out_File, search_string, stats); }
zipFile.close();
búsqueda de cadenas
public void searchString(Thread CThread, String Source_File, BufferedInputStream in, File outfile, String search, String stats) throws IOException
{
int count = 0;
int countw = 0;
int countl = 0;
String s;
String[] str;
BufferedReader br2 = new BufferedReader(new InputStreamReader(in));
System.out.println(CThread.currentThread());
while ((s = br2.readLine()) != null)
{
str = s.split(search);
count = str.length - 1;
countw += count; //word count
if (s.contains(search))
{
countl++; //line count
WriteFile(CThread,s, outfile.toString(), search);
}
}
br2.close();
in.close();
}
--------------------------------------------------------------------------------
public void WriteFile(Thread CThread,String line, String out, String search) throws IOException
{
BufferedWriter bufferedWriter = null;
System.out.println("writre thread"+CThread.currentThread());
bufferedWriter = new BufferedWriter(new FileWriter(out, true));
bufferedWriter.write(line);
bufferedWriter.newLine();
bufferedWriter.flush();
}
Por favor, me ayudan. Realmente toma 40 minutos para 10 archivos usando hilos y 15-20 minutos para un solo archivo de 70MB después de ser comprimido. Cualquier forma de minimizar el tiempo.
Usted es solamente usando un hilo ¿Querías usar varios? Además, ni siquiera está utilizando los vales countw, countl y count. Deshazte de tu llamada dividida. –
Sí. Intenté usar varios hilos. Uno para cada archivo en una carpeta. Pero incluso para un solo archivo, este proceso lleva casi 20 minutos. Entonces quiero minimizar el tiempo. – Geeta
También puede usar varios hilos en un solo archivo. FileChannel puede bloquear regiones del archivo para su procesamiento (ver http://java.sun.com/j2se/1.4.2/docs/api/java/nio/channels/FileChannel.html#lock%28long,%20long,% 20boolean% 29). –