将输入文件解析为java中的两个单独文件

时间:2013-07-22 06:25:21

标签: java

我有一个输入文件,如下所示(例如):

10 12
1
2
...
9
10
1
2
...
11
12

第一行告诉接下来的10行代表part1

接下来的12行代表part2

我想创建两个单独的文件part1.txtpart2.txt来解析原始的input.txt文件。

怎么办?好心的任何建议?我正在使用java Scanner。

解决方案(部分):根据以下建议为我工作

    Scanner scanner = new Scanner(filename);        
    try {
        String[] first_line = scanner.nextLine().split("\\s+", 3); // reading the first line of the input file

        int EdgeCount = Integer.parseInt(first_line[0]);    
        int VertexCount = Integer.parseInt(first_line[1]);  
        String hasWeight = first_line[2];

        while (scanner.hasNextLine()) {
            if(EdgeCount != 0) { // check whether any more edges are left to read from input file
                Scanner edge_scanner = new Scanner(scanner.nextLine());

....

3 个答案:

答案 0 :(得分:1)

由于这听起来像家庭作业,我不会考虑太多的代码细节,但你可以阅读第一行,然后使用.split("\\s+")类中的String方法。

执行此操作后,您将在第一个位置使用10并在第二个位置使用12

当您迭代下一行时,只需保留一个计数器并检查计数器的值是否小于或等于10.如果这样,则您知道需要输出一个文件。如果条件不再成立且计数器现在大于10但小于或等于10 + 12,那么您知道应该在第二个文件中打印。

答案 1 :(得分:1)

首先,逐行读取文件,先将第10行写入part1.txt,然后在12行之后写入part2.txt。

对于这种使用这样的模式:

BufferedReader br = new BufferedReader(new FileReader(“your input file path”));

    String line = null;

    int lineCounter = 1;

    while( (line = br.readLine()) != null)
    {
    if( (lineCounter % 23 ) < 11 )
    {
       //Write part1.txt
    }
    else if( (lineCounter %23) > 10 )
    {
        //write part2.txt
    }
    lineCounter++;
    }

    br.close();

答案 2 :(得分:1)

试试这个,

Scanner scanner = new Scanner(System.in);
br  = new BufferedReader(new FileReader("fileName.txt"));
int first = scanner.nextInt(); //10
int second = scanner.nextInt();//12
int x = 0;
int j = 0;
while ((sCurrentLine  = br.readLine()) != null) 
   {
     if (x <= first)
     {
        x++;
        //write in 1st file
     }
     else if (j <= second)
     {
        j++;
        //write in 2nd file
     }
}
br.close();