Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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_Csv_Split_Filesystems_Tab Delimited - Fatal编程技术网

如何使用java读取选项卡分隔的文件并从中选择几个值

如何使用java读取选项卡分隔的文件并从中选择几个值,java,csv,split,filesystems,tab-delimited,Java,Csv,Split,Filesystems,Tab Delimited,我有一个标签分开的文件,看起来像这样 STID STNM TIME TMAX TMAXO TMIN TMINO TAVG TBAD DMAX DMAXO DMIN DMINO DAVG VDEF DBAD SMAX SMAXO SMIN SMINO SAVG SBAD BMAX BMAXO BMIN BMINO BAVG BBAD S5MX S5MXO

我有一个标签分开的文件,看起来像这样

 STID  STNM  TIME     TMAX TMAXO     TMIN TMINO    TAVG     TBAD     DMAX DMAXO     DMIN DMINO    DAVG    VDEF     DBAD     SMAX SMAXO     SMIN SMINO    SAVG     SBAD     BMAX BMAXO     BMIN BMINO    BAVG     BBAD     S5MX S5MXO     S5MN S5MNO    S5AV     S5BD     S25X S25XO     S25N S25NO   S25AV    S25BD     S60X S60XO     S60N S60NO   S60AV    S60BD     HMAX HMAXO     HMIN HMINO    HAVG     HBAD     PMAX PMAXO     PMIN PMINO    PAVG    MSLP     PBAD     AMAX AMAXO     ATOT     ABAD     PDIR     PDFQ     SDIR     SDFQ     IBAD     WSMX WSMXO     WSMN WSMNO    WSPD    WDEV    WMAX WMAXO     WBAD     RAIN     RNUM    RMAX     RBAD    9AVG     9BAD     2MAX     2MIN     2AVG     2DEV     2BAD     HDEG     CDEG     HTMX HTMXO    HTBAD     WCMN WCMNO    WCBAD
 ACME   110     0    76.32   131    69.22   184   71.57        0    69.10   286    61.55     3   66.48    4.22        0    83.16     3    78.24   288   80.85        0    85.37     3    77.74   288   81.77        0    83.12   150    77.86   288   80.58        0    83.84     3    81.23   288   82.34        0    81.54     3    80.94   285   81.29        0    96.82   278    66.82     1   84.59        0    28.74   284    28.67    23   28.71   30.10        0   412.73   130     5.46        0     -996     -999     -996     -999       59    10.92   132     0.00    37    4.34    2.41   14.61   146        0     0.22       19    0.24        0   71.67        0     8.44     0.00     2.49     2.30        0     0.00     7.77     -996   999      288     -996   999      288
 ADAX     1     0    73.99    96    68.61    21   71.32        0    70.91   169    62.77     1   68.22    2.58        0    87.15     3    82.99   288   84.83        0    88.32     3    79.54   288   83.59        0    85.06     3    81.84   288   83.31        0    88.48     3    85.21   288   86.61        0     -996   999     -996   999    -996       96    98.40   274    73.27     1   90.20        0    29.08   137    29.01    17   29.04   30.08        0   210.42   151     5.23        0     -996     -999     -996     -999      139    12.83   106     0.00    33    3.65    3.03   19.28   121        0     0.24       23    0.24        0   71.57        0     8.84     0.00     2.07     2.48        0     0.00     6.30     -996   999      288     -996   999      288
 ALTU     2     0    75.51   107    68.74   168   71.63        0    70.43   279    64.56   125   67.48    3.50        0    80.60     3    77.88   288   78.91        0    79.11     3    75.96   288   77.08        0    79.97     3    77.23   288   78.41        0    81.95     3    79.57   288   80.55        0     -996   999     -996   999    -996       96    98.36   286    70.28   106   87.18        0    28.68   276    28.60    51   28.64   30.09        0   202.20   123     5.03        0        2    30.80        4    18.63       25    13.72   128     0.00    70    5.79    2.71   18.19   128        0     0.19       19    0.12        0   71.53        0     9.55     0.00     3.71     2.22        0     0.00     7.12     -996   999      288     -996   999      288
STID
STNM
TIME
TMAX
TMAXO
TMIN
TMINO
TAVG
TBAD
DMAX
DMAXO
DMIN
DMINO
DAVG
VDEF
DBAD
SMAX
SMAXO
SMIN
我正在尝试读取此文件,以便可以将此文件中的一些值附加到另一个文件中

但首先,我无法读取列TMAX的值,它在列中是第四个

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

    public class first {

        public static void main(String[] args) 
        {
            // TODO Auto-generated method stub

                        String fileName="daily.txt";
                    File file = new File(fileName);
                    try{
                        Scanner inputStream = new Scanner(file);
                        while (inputStream.hasNext()){
                            String data = inputStream.next();
                            String[] values = data.split("\t");
                            System.out.println(values[4]);
                        }
                        inputStream.close();
                        }
                    catch(FileNotFoundException e){
                        e.printStackTrace();
                    }
                }
    }
当我使用上面的代码时,输出如下

 STID  STNM  TIME     TMAX TMAXO     TMIN TMINO    TAVG     TBAD     DMAX DMAXO     DMIN DMINO    DAVG    VDEF     DBAD     SMAX SMAXO     SMIN SMINO    SAVG     SBAD     BMAX BMAXO     BMIN BMINO    BAVG     BBAD     S5MX S5MXO     S5MN S5MNO    S5AV     S5BD     S25X S25XO     S25N S25NO   S25AV    S25BD     S60X S60XO     S60N S60NO   S60AV    S60BD     HMAX HMAXO     HMIN HMINO    HAVG     HBAD     PMAX PMAXO     PMIN PMINO    PAVG    MSLP     PBAD     AMAX AMAXO     ATOT     ABAD     PDIR     PDFQ     SDIR     SDFQ     IBAD     WSMX WSMXO     WSMN WSMNO    WSPD    WDEV    WMAX WMAXO     WBAD     RAIN     RNUM    RMAX     RBAD    9AVG     9BAD     2MAX     2MIN     2AVG     2DEV     2BAD     HDEG     CDEG     HTMX HTMXO    HTBAD     WCMN WCMNO    WCBAD
 ACME   110     0    76.32   131    69.22   184   71.57        0    69.10   286    61.55     3   66.48    4.22        0    83.16     3    78.24   288   80.85        0    85.37     3    77.74   288   81.77        0    83.12   150    77.86   288   80.58        0    83.84     3    81.23   288   82.34        0    81.54     3    80.94   285   81.29        0    96.82   278    66.82     1   84.59        0    28.74   284    28.67    23   28.71   30.10        0   412.73   130     5.46        0     -996     -999     -996     -999       59    10.92   132     0.00    37    4.34    2.41   14.61   146        0     0.22       19    0.24        0   71.67        0     8.44     0.00     2.49     2.30        0     0.00     7.77     -996   999      288     -996   999      288
 ADAX     1     0    73.99    96    68.61    21   71.32        0    70.91   169    62.77     1   68.22    2.58        0    87.15     3    82.99   288   84.83        0    88.32     3    79.54   288   83.59        0    85.06     3    81.84   288   83.31        0    88.48     3    85.21   288   86.61        0     -996   999     -996   999    -996       96    98.40   274    73.27     1   90.20        0    29.08   137    29.01    17   29.04   30.08        0   210.42   151     5.23        0     -996     -999     -996     -999      139    12.83   106     0.00    33    3.65    3.03   19.28   121        0     0.24       23    0.24        0   71.57        0     8.84     0.00     2.07     2.48        0     0.00     6.30     -996   999      288     -996   999      288
 ALTU     2     0    75.51   107    68.74   168   71.63        0    70.43   279    64.56   125   67.48    3.50        0    80.60     3    77.88   288   78.91        0    79.11     3    75.96   288   77.08        0    79.97     3    77.23   288   78.41        0    81.95     3    79.57   288   80.55        0     -996   999     -996   999    -996       96    98.36   286    70.28   106   87.18        0    28.68   276    28.60    51   28.64   30.09        0   202.20   123     5.03        0        2    30.80        4    18.63       25    13.72   128     0.00    70    5.79    2.71   18.19   128        0     0.19       19    0.12        0   71.53        0     9.55     0.00     3.71     2.22        0     0.00     7.12     -996   999      288     -996   999      288
STID
STNM
TIME
TMAX
TMAXO
TMIN
TMINO
TAVG
TBAD
DMAX
DMAXO
DMIN
DMINO
DAVG
VDEF
DBAD
SMAX
SMAXO
SMIN

我想获得一个显示指定列号值的输出。

您需要使用nextLine而不是next来读取整行。我还运行了你的程序,发现你的文件并没有按tab进行真正的拆分,这就是为什么拆分可能不起作用。解决这两个问题,然后你就可以开始了。

这里有一个示例方法,它可以实现你想要的东西,但没有经过测试,但概念就在那里。基本上,您需要逐行读取,将行拆分为某种数组或列表,然后生成2d数组。通常,您也可以用空格分隔替换拆分\t

public List<String> getByColumn(int col, File file)
{
    List<ArrayList<String>> arrayOfArrays = null;
    try {
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
        BufferedReader br = new BufferedReader(isr);

        String line;

        arrayOfArrays = new ArrayList<ArrayList<String>>();

        while ( ( line = br.readLine() ) != null )
        {
            ArrayList<String> list = new ArrayList<String>(Arrays.asList(line.split("\t")));

            arrayOfArrays.add(list);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    ArrayList<String> output = new ArrayList<String>();

    //can use a foreach loop, or the below method.
    //for (ArrayList<String> l : arrayOfArrays)
    //{
    //    output.add(l.get(col));
    //}

    for ( int i = 1; i < arrayOfArrays.size(); i++ )
    {
        output.add(arrayOfArrays.get(i).get(col));
    }

    return output;

}
您真的应该使用它-它将比String.split快得多,还可以帮助您选择所需的列:

//configure the parser
TsvParserSettings parserSettings = new TsvParserSettings();
parserSettings.selectFields("TMAX" /*and others*/);

//then parse
TsvParser parser = new TsvParser(parserSettings);

List<String[]> parsedRows = parser.parseAll(new File("daily.txt"), "UTF-8");
希望这有帮助


免责声明:我是这个图书馆的作者。它是开源的、免费的Apache 2.0许可证

使用此代码解析该行

String[] values = data.trim().replaceAll(" +", " ").split(" ");

nextLine,而不是next。Java阵列不是基于0的吗?这将使TMAX位于指数3,而不是4。以上两条评论都是正确的。我想补充一点,inputStream对于扫描仪来说是一个误导性的名称,它不是inputStream使用BufferedReader而不是扫描仪有什么好处吗?既然OP只想要第四列,为什么还要创建ArrayOfarray呢?没有真正的理由写一个方法来获得第四列,因为他将来很可能需要更多的列。此外,这里可能不需要缓冲读取器,但在读取大文件时,缓冲读取器具有更好的约定和更好的性能。我尝试过它,但parserSettings.selectFieldsTMAX;有问题。此行有多个标记-标记上有语法错误。,@应在此标记后出现-语法错误,插入以完成MethodDeclaration-语法错误,插入标识符以完成MethodHeaderName-语法错误,插入SimpleName以完成QualifiedName-语法错误,插入以完成SingleMemberAnnotation我无法理解问题的确切位置。很抱歉,您遇到的所有这些错误都是基本的Java语法错误,您需要熟悉这些错误。在这方面我帮不了你多少忙,但听起来你好像没有导入库。