我正在尝试在Java程序中读取.csv文件。该文件包含一些包含多行的单元格。
我在Linux操作系统上,所以我尝试使用以下内容删除换行符:
awk -v RS =“”'{gsub(/ \ n /,“”)} 1'cleanPaperAuthor.csv> cleanPaperAuthor1.csv
该DID导致单元格中的多行数据全部显示在一行上。但是当我试图在java中读取文件时,读者仍然认为它在单元格数据的中间遇到了行的结尾。
所以我试过了 awk -v RS =“”'{gsub(/ \ r /,“”)} 1'cleanPaperAuthor1.csv> cleanPaperAuthor2.csv
这导致.csv文件中的所有数据都放在一行上。
然后我试过了 awk -v RS =“”'{gsub(/ \ r \ n /,“”)} 1'cleanPaperAuthor.csv> cleanPaperAuthor3.csv。
我不确定这是否有效 - 我仍然在打开文件。
我知道有一个CSVReader类,但我真的想知道我能做什么而不必处理设置和更改我的代码。那里有人有什么想法吗?我现在完全糊涂了。
答案 0 :(得分:2)
使用CSV解析器非常简单;设置和API。而且,除了处理跨越多行的值之外,它还可以处理引用元素中的逗号和解析引号""
内的值等等。另外,您也可以使用库将文本序列化为CSV格式。
以下是OpenCSV读取一行csv值的示例。
String input = "value1, \"value2\", \"value3, 1234\", \"value4\n"
+ "value5\n"
+ "value6\"";
try (CSVReader reader = new CSVReader(new StringReader(input))) {
String [] tokens;
while ((tokens = reader.readNext()) != null) {
System.out.println(Arrays.toString(tokens));
}
} catch (IOException e) {
e.printStackTrace();
}
输出: (“value3,1234”是一个值。)
[value1, value2, value3, 1234, value4
value5
value6]
只需确保将Apache Commons Lang 3.x jar添加到类路径。
答案 1 :(得分:0)
String UPLOADED_FOLDER = "/home/Rahul/Developement/Rahul/personal/uploadedfile/";
try {
// ** get the file and store at to that location **
byte[] bytes = file.getBytes();
Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename());
Files.write(path, bytes);
redirectAttributes.addFlashAttribute("You successfully uploaded '" + file.getOriginalFilename() + "'");
} catch (IOException e) {
e.printStackTrace();
}
try {
String fileName = file.getOriginalFilename();
System.out.println("/home/Rahul/Developement/Rahul/personal/uploadedfile/" + fileName);
String filePath = new File("/home/Rahul/Developement/Rahul/personal/uploadedfile/")
.getAbsolutePath();
boolean check = true;
File file1 = new File("/home/Rahul/Developement/Rahul/personal/uploadedfile/" + fileName);
System.out.println(file1.exists());
// TO CHECK FILE IS CSV OR NOT
if (fileName.endsWith(".csv")) {
check = true;
System.out.println("extension");
if (!fileName.isEmpty()) {
// *** to read the file from the location
// **("/home/Rahul/Developement/Rahul/personal/uploadedfile/")**
BufferedReader br = new BufferedReader(new FileReader(
"/home/Rahul/Developement/Rahul/personal/uploadedfile/" + fileName));
InputStream is = new FileInputStream(
"/home/Rahul/Developement/Rahul/personal/uploadedfile/" + fileName);
}