Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中读取一半或三分之一的文件?_Java_Bufferedreader - Fatal编程技术网

如何在java中读取一半或三分之一的文件?

如何在java中读取一半或三分之一的文件?,java,bufferedreader,Java,Bufferedreader,我有300多个CSV文件,我应该读取所有这些文件,然后对它们执行各种操作。首先,我应该读取仅有的半个文件,然后,稍后,我应该读取三分之一的文件 这就是CSV文件的外观。我应该只读avg_rss12列,而且也只读半列,然后再读三分之一。每个文件中有500多行,每个文件中的行数会因每个文件而更改 假设一个文件有500行,那么我应该读取前250行(对于半个文件),如果我应该读取三分之一的文件,则应该读取167行。每个文件中的行数不同,有300多行,因此我无法手动修改每个文件 # Task: bendi

我有300多个CSV文件,我应该读取所有这些文件,然后对它们执行各种操作。首先,我应该读取仅有的半个文件,然后,稍后,我应该读取三分之一的文件

这就是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);

        }
publicstaticvoidmain(字符串参数[])
{
字符串路径\u Test=“E:\\DTW-KNN\\Dataset\\Test\\bending1\\dataset1.csv”;
文件数据文件=新文件(路径测试);
长数据_size=dataFile.length();
字符串[]test=null;
整数计数=0;
int i;
试一试{
BufferedReader reader=新BufferedReader(新文件读取器(数据文件));

对于(i=0;i您似乎试图将行存储在
null
数组(
test
)中。您必须将数组分配给(至少)在您尝试将任何数据放入文件之前,将文件中的行数减半。

我会这样做。只需将所有有效行读取到列表中,然后您就可以迭代所需的行数并解析其中的任何数据

    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);
    }
Scanner scan=新扫描仪(新文件(“dataset1.csv”);
列表行=新的ArrayList();
while(scan.hasNextLine()){
String line=scan.nextLine();
//如果行不是注释或空
如果(!line.startsWith(“#”)&&!line.trim().isEmpty()){
行。添加(行);
}
}
scan.close();
//过半
对于(int i=0;i
您的代码不起作用,但只需稍作修改,您就可以读取整个文件并显示在控制台上(修改的最小值与您的代码相似):

不清楚您是否需要阅读300个文件中的一半和三分之一或每个文件,但我认为这是第二种选择,因此我的策略是:

  • 获取文件中的行数(注意file.length()返回文件中的字节数)
  • 根据行数(半行或三分之一)计算需要读取的行数
  • 阅读必要的行数
在Java 8中,可以使用以下命令从文件中获取行数:

Files.lines(Paths.get(fileName)).count();

File.length();
将以字节为单位显示文件大小。这并不一定意味着读取一半字节将读取一半行。相反,您应该在计算行数时读取文件中的所有数据,并在最后读取(一旦您知道有多少行)只需扔掉不需要的行。如果数据大小为n字节,则尝试读取n/2行。如果文件有一行300字节,则尝试读取150行….“根本不读取文件”的确切含义是什么?将
for
循环检查作为浮点操作进行,不会给您带来任何好处,也会降低性能。@Tripkinetics类似这样的长行数=Files.lines(path.count();在java 8中?@Samvid Kulkarni非常正确。除非您事先知道文件中有多少行,否则您必须全部读取。文件不“知道”里面有多少行。
Files.lines(Paths.get(fileName)).count();