Java 如何将相同的文本行(以开头)拆分为一个文件?
我有一个很大的网络日志文件。用户由不同的数字表示。每行以数字开头 我必须拆分文本文件,以便相同的用户进入一个文件 我的输入文本文件如下所示:Java 如何将相同的文本行(以开头)拆分为一个文件?,java,Java,我有一个很大的网络日志文件。用户由不同的数字表示。每行以数字开头 我必须拆分文本文件,以便相同的用户进入一个文件 我的输入文本文件如下所示: 6993 xylazine 2006-03-01 19:09:30 3 6993 xylazine 2006-03-01 19:09:30 9 6993 irs 6993 6997 veterinarian horses 2006-03-05 10:39:16 6997 socil
6993 xylazine 2006-03-01 19:09:30 3
6993 xylazine 2006-03-01 19:09:30 9
6993 irs
6993
6997 veterinarian horses 2006-03-05 10:39:16
6997 socil security admin. 2006-03-06 18:57:30
6997 social security administration 2006-03-06 18:58:35
6997 bank of america branches 2006-03-07 20:08:03
6997 phonebokk 2006-03-07 20:12:15
6997 phone book 2006-03-07 20:12:19
我用FileReader和BufferedReader编写了以下代码,但是这些API似乎没有提供我所需要的功能,但是它生成了许多文件。但是这段代码将每一行分割成单独的文件。但是我想把它分成相同的用户(相同的数字(以开头))的一个文件。有人能告诉我如何修复下面的代码,使它实现我的愿望吗
package fileread;
import java.io.*;
import java.io.BufferedReader;
import java.io.PrintWriter;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class FileRead {
public static void main( String[] args ) {
File f = new File( "D:test.txt" );
BufferedReader fileReader = null;
FileOutputStream fout = null;
BufferedWriter out = null;
try {
String text = " ", text1 = "content";
int x = 2;
fileReader = new BufferedReader( new InputStreamReader(
new FileInputStream( f ) ) );
fout = new FileOutputStream( new File( "test1.txt" ) );
OutputStreamWriter osr = new OutputStreamWriter( fout, "UTF-8" );// No
// I18N
PrintWriter pwr = new PrintWriter( osr, false );
out = new BufferedWriter( new OutputStreamWriter( fout ) );
while( (text = fileReader.readLine()) != null ) {
text = text.trim();
int inde = text.indexOf( " " );
System.out.println( inde );
if( inde > 0 ) {
String text2 = text1;
text1 = text.substring( 0, inde );
text1 = text1.trim();
text2 = text2.trim();
// System.out.println(text1);
if( text1.equals( text2 ) || text2.equals( "content" ) ) {
pwr.print( text );
pwr.print( "\n" );
} else {
osr.flush();
osr.close();
fout = new FileOutputStream( new File( "D:test" + x
+ ".txt" ) );
osr = new OutputStreamWriter( fout, "UTF-8" );// No I18N
pwr = new PrintWriter( osr, false );
pwr.print( text );
pwr.print( "\n" );
x++;
}
}
}
osr.flush();
osr.close();
} catch( Exception e ) {
e.printStackTrace();
} finally
{
try {
if( fileReader != null ) {
fileReader.close();
}
if( fout != null ) {
fout.close();
}
if( out != null ) {
out.close();
}
} catch( Exception e ) {
}
}
}
}
但是这段代码将每一行分割成单独的文件。但是我想把它分成相同的用户(相同的数字(以开头))的一个文件。有人能给我一个主意吗???我是java新手。请提出一些建议。提前感谢。您应该检查用户名,然后将该行写入正确的文件中。我会将一个文件的每一对用户名和数据记录到地图中。然后根据用户的名字,我将把每个记录放入不同的列表中,最后将每个列表写入单独的文件中。 它看起来像这样(伪代码):
Map userListPairs=newhashmap();
while(下一行存在){
提取用户名
如果(!userlistparies.contains(username)){
put(用户名,newlinkedlist());
}
userListPairs.get(用户名).add(行);
}
对于(条目fileData:userListPairs.entrySet()){
//打开名为fileData.key()的文件
//将fileData.value()中的记录写入文件。
}
这是因为您正在为每个x
值打开一个新文件,该值只是您的计数器。改为按用户ID打开文件。
Map<String, String> userListPairs = new HashMap<String, List<String>>();
while(next line exists) {
extract username
if (!userListPairs.contains(username)) {
userListPairs.put(username, new LinkedList<String>());
}
userListPairs.get(username).add(line);
}
for (Entry<String, List<String>> fileData : userListPairs.entrySet()) {
//open file with name fileData.key()
//write records from fileData.value() to the file.
}