Java将文本文件转换为逗号分隔文件

时间:2013-12-10 15:36:36

标签: java file

我有一个文本文件,如下所示:

ExampleA1
ExampleA1b

ExampleA2
ExampleA2b

ExampleA3
ExampleA3b

有人可以帮助我将其转换为逗号分隔格式,例如:

ExampleA1, ExampleA1b
ExampleA2, ExampleA2b
ExampleA3, ExampleA3b

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

我可能会使用这样的东西

File f = new File("temp/file.txt");
if (!f.exists()) {
  return;
}
Scanner scanner = null;
List<String> al = new ArrayList<String>();
try {
  scanner = new Scanner(f);
  while (scanner.hasNextLine()) {
    String line1 = scanner.nextLine().trim();
    if (line1.length() == 0) {
      continue;
    }
    String line2 = "";
    if (scanner.hasNextLine()) {
      line2 = scanner.nextLine().trim();
    }
    if (line2.trim().length() > 0) {
      al.add(line1 + ", " + line2);
    } else {
      al.add(line1);
    }
  }
} catch (FileNotFoundException e) {
  e.printStackTrace();
} finally {
  scanner.close();
}
FileOutputStream fos = null;
try {
  fos = new FileOutputStream(f, false);
  PrintWriter pw = new PrintWriter(fos);
  for (String str : al) {
    pw.println(str);
  }
  pw.close();
} catch (FileNotFoundException e) {
  e.printStackTrace();
} finally {
  if (fos != null) {
    try {
      fos.close();
    } catch (IOException e) {
    }
  }
}

开始
cat file.txt
ExampleA1
ExampleA1b

ExampleA2
ExampleA2b

ExampleA3
ExampleA3b

我用上面的

得到了这个
ExampleA1, ExampleA1b
ExampleA2, ExampleA2b
ExampleA3, ExampleA3b

答案 1 :(得分:0)

乍一看似乎非常容易,但仔细观察后就不那么容易了:)以下是答案:

    public static void main(String[] args) {
    try {
        FileInputStream fin = new FileInputStream("/home/venkatesh/Desktop/test.txt");
        BufferedReader reader = new BufferedReader(new InputStreamReader(fin));
        int data = -1;
        int prevChar = -1;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        do {
            data = reader.read();
            if (data == -1) break;
            if (data == '\n') {
                if (prevChar == '\n') {
                    baos.write('\n');
                    prevChar = 0;
                } else {
                    prevChar = data;
                }
            } else {
                if (prevChar == '\n') {
                    baos.write(',');
                    baos.write(' ');
                }
                baos.write(data);
                prevChar = data;
            }
        } while (true);
        System.out.println(" Written Text : \n" + new String(baos.toByteArray()));
        reader.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

简要说明:我们在此执行以下操作:
1。通过FileInputStream打开文件,然后由选择的Reader包装它。打开一个Outpustream(我在这里使用了ByteArrayOutputStream来记录简单性)。
2。使用read()API读取char并查看几个特定于应用程序的条件 -
一个。如果currentReadChar是新行char(\ n)并且之前没有找到新行char,则只跳转到下一个char(不要向输出流写任何内容)
湾如果currentReadChar是newline char而previous也是newline char,那么写一个换行符而不是两个,然后conintue到next char。
℃。如果currentReadChar不是换行符char而且previous是一个换行符char,则在写入当前char之前向流写入','
d。如果currentReadChar不是换行符,而前一个不是换行符,则写入当前的char。
3。关闭流/阅读器,并根据需要使用生成的输出流/字符串。



基本假设:
1。 ExampleA1和ExampleA1b之间只有一个新的行char
2。下一组ExampleA之间有两个新的行号...


希望这会有所帮助...