我有超过300个CSV文件,我应该阅读所有这些文件,然后对它们执行各种操作。首先我应该读取唯一的HALF文件然后,我应该读取三分之一的文件。
这是CSV文件的外观。我只应该阅读avg_rss12列,而且只有半列,然后是后三分之一。每个文件中有500多行,每个文件中的行数都会随每个文件而变化。
假设一个文件有500行,那么我应该先读取250(半文件)和167行,如果我应该读取三分之一文件。每个文件中的行数不同,超过300行,因此我无法手动修改每个文件。
# Task: bending1
# Frequency (Hz): 20
# Clock (millisecond): 250
# Duration (seconds): 120
# Columns: time avg_rss12 var_rss12 avg_rss13 var_rss13 avg_rss23 var_rss23
0 39.25 0.43 22.75 0.43 33.75 1.3
250 39.25 0.43 23 0 33 0
500 39.25 0.43 23.25 0.43 33 0
750 39.5 0.5 23 0.71 33 0
1000 39.5 0.5 24 0 33 0
1250 39.25 0.43 24 0 33 0
1500 39.25 0.43 24 0 33 0
这是我的代码。由于某种原因,它根本不读取文件。也是我的方式正确或我做错了什么?
public static void main(String args[])
{
String path_Test = "E:\\DTW-KNN\\Dataset\\Test\\bending1\\dataset1.csv";
File dataFile = new File(path_Test);
long data_size = dataFile.length();
String[] test = null;
int count = 0;
int i;
try {
BufferedReader reader = new BufferedReader(new FileReader(dataFile));
for (i = 0; i <= data_size/2.0; i++) {
test[i] = reader.readLine();
System.out.println(test[i]);
count++;
}
}
catch (Exception e)
{
e.printStackTrace();
}
System.out.println(count);
}
答案 0 :(得分:1)
您似乎试图将行存储在test
数组(noink
)中。在尝试将任何数据放入其中之前,必须将数组分配给(至少)文件中行数的一半。
答案 1 :(得分:1)
我会做这样的事情。只需将所有有效行读入列表,然后您可以迭代所需的数量并解析您想要的任何数据。
Scanner scan = new Scanner(new File("dataset1.csv"));
List<String> lines = new ArrayList<>();
while (scan.hasNextLine()) {
String line = scan.nextLine();
// If line is not a comment or empty
if (!line.startsWith("#") && !line.trim().isEmpty()) {
lines.add(line);
}
}
scan.close();
// Go through half the lines
for (int i = 0; i < lines.size() / 2; ++i) {
String line = lines.get(i);
String[] split = line.split("\\s+"); // split on whitespace
double avg_rss12 = Double.parseDouble(split[1]);
System.out.println(avg_rss12);
}
答案 2 :(得分:0)
您的代码无法正常工作,但只需稍加修改即可读取整个文件并在控制台上显示(最小修改后看起来就像您的代码):
public static void main(String args[]) {
String pathTest = "E:\\DTW-KNN\\Dataset\\Test\\bending1\\dataset1.csv";
File file = new File(pathTest);
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String line = reader.readLine();
while (line != null) {
System.out.println(line);
line = reader.readLine();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close(); //always close it, or use try-with-resources from Java7 :)
} catch (IOException e) {
}
}
}
}
目前尚不清楚您是否需要阅读300个文件中的一半和三分之一或每个文件,但我认为这是第二个选项,因此我的策略是:
在Java 8中,您可以使用以下命令从文件中获取行数
Files.lines(Paths.get(fileName)).count();