我正在尝试从csv获取某些数据的程序,并将其放在我的文本文件的某些行中。我的csv每个Sale都有多行/列。它看起来像:
销售,编号,代码,交货,日期(标题下方的值)
Sale1,3333,3213,May18,Arp10
我的文本文件需要来自csv的数据,在某些时候它会显示“type”,所以我将它作为: 键“标签” 键“标签” 输入“”
我的代码是:
public static void ChangeFile () throws FileNotFoundException, IOException {
BufferedReader br = new BufferedReader(new FileReader("\\C:\\Users\\READ.txt\\"));
Scanner s = new Scanner(br);
for(String line; (line = br.readLine()) != null; ) {
String word = "type";
int totalCount = 0;
int wordCount =0;
while (s.hasNext()){
totalCount++;
if(s.next().equals(word)){
wordCount++;
}
}
// int counter = 0;
//
ArrayList<String> lines = new ArrayList<String>();
System.out.println("word count: " + wordCount);
System.out.println("total count"+ totalCount);
}
} }
我上面的函数也在文本文件和csv中读取。我不知道每个文件文件中的所有单词都存储在一个数组中,并且每个单词都用于工作“类型”并对类型进行计数。现在它只是计算出现的单词类型的数量。注意:我不需要替换每个单独的类型,只需要在单词之后添加一些需要的数据。在从csv获取数据时苦苦挣扎。
导入我的csv的代码是:
try
{
ArrayList<String> ar = new ArrayList<String>();
File csvFile = new File("C:\\Users\\book1.csv\\");
BufferedReader br = new BufferedReader(new FileReader(csvFile));
String line = "";
StringTokenizer st = null;
int lineNumber = 0;
int tokenNumber = 0;
while ((line = br.readLine()) != null) {
String[] arr = line.split(",");
arr = line.split(" "); // gets rid of space
//for the first line it'll print
for (int i=0; i<arr.length; i++){
//String.format("%-10s",arr[i]);
System.out.println(arr[i]+" " ); // h
}
lineNumber++;
//use comma as token separator
System.out.println();
}
}
catch(IOException ex) {
ex.printStackTrace();
}
答案 0 :(得分:1)
您应该使用正确的解析器,因为它更可靠。
univocity-parsers比使用line.split(",");
更快,并且会处理字段中的引号,行结尾和分隔符等内容。它还会清除您在默认情况下遇到问题的空白区域。
试试这段代码:
CsvParserSettings settings = new CsvParserSettings();
settings.detectFormatAutomatically();
CsvParser parser = new CsvParser(settings);
List<String[]> allRows = parser.parseAll(new File("C:\\Users\\READ.txt"));
希望它有所帮助。
免责声明:我是这个图书馆的作者。它是开源和免费的(Apache 2.0许可证)