是否可以创建一个Java程序来识别.txt文件中的文本并将其写入.csv文件?如果是的话,你会如何从这个问题开始呢?
我的.txt文件是Text1 | Text 2所以我可以以某种方式获取char“|”并将其分成两个单元格。
答案 0 :(得分:7)
这在Java 8中非常简单:
public static void main(String[] args) throws Exception {
final Path path = Paths.get("path", "to", "folder");
final Path txt = path.resolve("myFile.txt");
final Path csv = path.resolve("myFile.csv");
try (
final Stream<String> lines = Files.lines(txt);
final PrintWriter pw = new PrintWriter(Files.newBufferedWriter(csv, StandardOpenOption.CREATE_NEW))) {
lines.map((line) -> line.split("\\|")).
map((line) -> Stream.of(line).collect(Collectors.joining(","))).
forEach(pw::println);
}
}
首先,您可以在Path
个对象上获取文件
然后打开PrintWriter
到目的地Path
。
现在,您使用lambdas进行Java 8流处理:
Files.lines(txt)
流式传输文件中的行map((line) -> line.split("\\|"))
将每一行拆分为String[]
|
map((line) -> Stream.of(line).collect(Collectors.joining(",")))
使用String[]
,
forEach(pw::println)
将新行写入目标文件。使用import static
:
try (
final Stream<String> lines = Files.lines(txt);
final PrintWriter pw = new PrintWriter(newBufferedWriter(csv, StandardOpenOption.CREATE_NEW))) {
lines.map((line) -> line.split("\\|")).
map((line) -> Stream.of(line).collect(joining(","))).
forEach(pw::println);
}
由于Java 8仅在昨天发布,因此这是一个Java 7解决方案:
public static void main(String[] args) throws Exception {
final Path path = Paths.get("path", "to", "folder");
final Path txt = path.resolve("myFile.txt");
final Path csv = path.resolve("myFile.csv");
final Charset utf8 = Charset.forName("UTF-8");
try (
final Scanner scanner = new Scanner(Files.newBufferedReader(txt, utf8));
final PrintWriter pw = new PrintWriter(Files.newBufferedWriter(csv, utf8, StandardOpenOption.CREATE_NEW))) {
while (scanner.hasNextLine()) {
pw.println(scanner.nextLine().replace('|', ','));
}
}
}
再次,使用import static
:
try (
final Scanner scanner = new Scanner(newBufferedReader(txt, utf8));
final PrintWriter pw = new PrintWriter(newBufferedWriter(csv, utf8, StandardOpenOption.CREATE_NEW))) {
while (scanner.hasNextLine()) {
pw.println(scanner.nextLine().replace('|', ','));
}
}
答案 1 :(得分:2)
是的,这是非常有可能的。 替换|通过,和 把它写到csv
public class NewClass {
public static void main(String[] args) throws IOException {
String data = "one|two|three|four"+"\n"+
"one|two|three|four";
//Use a BufferedReader to read from actual Text file
String csv = data.replace("|", ",");
System.out.println(csv);
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("MyCSV.csv")));
out.println(csv);
out.close();
}
}
输出
run:
one,two,three,four
one,two,three,four
BUILD SUCCESSFUL (total time: 0 seconds)
答案 2 :(得分:0)
首先需要How do I create a Java string from the contents of a file?。
然后,您可以利用How to split a string in Java并使用|
作为分隔符。
作为最后一步,您可以使用Joiner创建最终String
并使用How do I save a String to a text file using Java?存储它。
答案 3 :(得分:0)
是的,这是可能的。要完成您的任务,请阅读Input-
和OutputStreams
。
从一个简单的例子开始。从文件中读取一行文本并在控制台上打印出来。 然后以另一种方式执行 - 将一行文本写入文件。
通过这些示例获得的经验将有助于完成您的任务。
答案 4 :(得分:0)
尝试这可能会有所帮助
public class Test {
public static void main(String[] args) throws URISyntaxException,
IOException {
FileWriter writer = null;
File file = new File("d:/sample.txt");
Scanner scan = new Scanner(file);
File file2 = new File("d:/CSV.csv");
file.createNewFile();
writer = new FileWriter(file2);
while (scan.hasNext()) {
String csv = scan.nextLine().replace("|", ",");
System.out.println(csv);
writer.append(csv);
writer.append("\n");
writer.flush();
}
}
}
sample.txt的: -
He|looked|for|a|book.
He|picked|up|the|book.
答案 5 :(得分:0)
Commons CSV对于处理Java代码中的CSV输出也很有用 - 特别是它可以处理诸如引用之类的问题:
http://commons.apache.org/proper/commons-csv/
此外,公共IO对于简化读/写文件也非常有用:
https://commons.apache.org/proper/commons-io/description.html
HTH