Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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中将数字从文本文件读入ArrayList_Java_Arrays_Arraylist - Fatal编程技术网

在Java中将数字从文本文件读入ArrayList

在Java中将数字从文本文件读入ArrayList,java,arrays,arraylist,Java,Arrays,Arraylist,有谁能告诉我如何做这类事情的基本准则吗?您会使用数组还是ArrayList,为什么?就我的Java经验而言,我在网上发现的任何其他东西都太复杂而无法理解。该文件是一个简单的文本文件,每行有七个十进制值,包含三行。这是我到目前为止所做的,我只是测试它,看看我是否正确地处理了ArrayList。它一直打印一个只有两个括号的空ArrayList import java.io.File; import java.io.FileNotFoundException; import java.util.Arr

有谁能告诉我如何做这类事情的基本准则吗?您会使用数组还是ArrayList,为什么?就我的Java经验而言,我在网上发现的任何其他东西都太复杂而无法理解。该文件是一个简单的文本文件,每行有七个十进制值,包含三行。这是我到目前为止所做的,我只是测试它,看看我是否正确地处理了ArrayList。它一直打印一个只有两个括号的空ArrayList

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

public class SalesAnalysis 
{
    public static void main (String[] args) throws FileNotFoundException
    {

        Scanner salesDataFile = new Scanner(new File("SalesData.txt"));

        ArrayList<Double> salesData = new ArrayList<Double>();

        while(salesDataFile.hasNextDouble())
        {
            salesData.add(salesDataFile.nextDouble());
        }
        salesDataFile.close();

        System.out.println(salesData);

    }
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.ArrayList;
导入java.util.Scanner;
公共类销售分析
{
公共静态void main(字符串[]args)引发FileNotFoundException
{
Scanner salesDataFile=新扫描仪(新文件(“SalesData.txt”);
ArrayList salesData=新的ArrayList();
while(salesDataFile.hasNextDouble())
{
add(salesDataFile.nextDouble());
}
salesDataFile.close();
System.out.println(salesData);
}
}

正如@Justin Jasmann所说,你有逗号分隔的值,所以从技术上讲,它们不仅仅是
双值
值,为什么不将它们作为字符串读取,然后在使用
String.split(“,”)获得逗号分隔值后,使用
double.parseDouble(String s)
解析它们在每一行。

这就是你要找的

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.text.NumberFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;


public class FileRead {


    public static void main(String args[])
    {
        try{
            // Open the file that is the first 
            FileInputStream fstream = new FileInputStream("textfile.txt");

            // Use DataInputStream to read binary NOT text.
            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));

            String strLine;
            List<Double> saleNumbers= new ArrayList<Double>();

            //Read File Line By Line
            while ((strLine = br.readLine()) != null)   {
                // Add number from file to list 
                saleNumbers.add( parseDecimal(strLine)); 
            }
            //Close the input stream
            in.close();

            System.out.println(saleNumbers);
        }catch (Exception e){
            e.printStackTrace();
        }
    }



    public static double parseDecimal(String input) throws NullPointerException, ParseException{
          if(input == null){
            throw new NullPointerException();
          }

          input = input.trim();

          NumberFormat numberFormat = NumberFormat.getNumberInstance(Locale.US);
          ParsePosition parsePosition = new ParsePosition(0);
          Number number = numberFormat.parse(input, parsePosition);

          if(parsePosition.getIndex() != input.length()){
            throw new ParseException("Invalid input", parsePosition.getIndex());
          }

          return number.doubleValue();
        }
}
导入java.io.BufferedReader;
导入java.io.DataInputStream;
导入java.io.FileInputStream;
导入java.io.InputStreamReader;
导入java.text.NumberFormat;
导入java.text.ParseException;
导入java.text.ParsePosition;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Locale;
公共类文件读取{
公共静态void main(字符串参数[])
{
试一试{
//打开第一个文件
FileInputStream fstream=新的FileInputStream(“textfile.txt”);
//使用DataInputStream读取二进制而不是文本。
BufferedReader br=新的BufferedReader(新的InputStreamReader(fstream));
弦斯特林;
List saleNumbers=new ArrayList();
//逐行读取文件
而((strLine=br.readLine())!=null){
//将编号从文件添加到列表
saleNumbers.add(parseDecimal(strLine));
}
//关闭输入流
in.close();
系统输出打印项次(销售编号);
}捕获(例外e){
e、 printStackTrace();
}
}
公共静态双parseDecimal(字符串输入)引发NullPointerException,ParseException{
如果(输入==null){
抛出新的NullPointerException();
}
input=input.trim();
NumberFormat NumberFormat=NumberFormat.getNumberInstance(Locale.US);
ParsePosition ParsePosition=新的ParsePosition(0);
Number=numberFormat.parse(输入,parsePosition);
if(parsePosition.getIndex()!=input.length()){
抛出新的ParseException(“无效输入”,parsePosition.getIndex());
}
返回数字。doubleValue();
}
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.ArrayList;
导入java.util.Scanner;
公共类销售分析
{
公共静态void main(字符串[]args)引发FileNotFoundException
{
Scanner salesDataFile=新扫描仪(新文件(“SalesData.txt”);
ArrayList salesData=新的ArrayList();
while(salesDataFile.hasNextLine()){
String line=salesDataFile.nextLine();
扫描仪=新扫描仪(行);
scanner.useDelimiter(“,”);
while(scanner.hasNextDouble()){
salesData.add(scanner.nextDouble());
}
scanner.close();
}
salesDataFile.close();
System.out.println(salesData);
}
}
从文件中读取行,然后使用扫描仪为每个文件获取双倍

对于每行,您只需为每行创建列表,如:

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

public class SalesAnalysis
{
    public static void main (String[] args) throws FileNotFoundException
    {

        Scanner salesDataFile = new Scanner(new File("SalesData.txt"));

        while(salesDataFile.hasNextLine()){
            String line = salesDataFile.nextLine();

            ArrayList<Double> salesData = new ArrayList<Double>();

            Scanner scanner = new Scanner(line);
            scanner.useDelimiter(",");
            while(scanner.hasNextDouble()){
                salesData.add(scanner.nextDouble());
            }
            scanner.close();

            System.out.println(salesData);
        }

        salesDataFile.close();

    }
}
导入java.io.File;
导入java.io.FileNotFoundException;
导入java.util.ArrayList;
导入java.util.Scanner;
公共类销售分析
{
公共静态void main(字符串[]args)引发FileNotFoundException
{
Scanner salesDataFile=新扫描仪(新文件(“SalesData.txt”);
while(salesDataFile.hasNextLine()){
String line=salesDataFile.nextLine();
ArrayList salesData=新的ArrayList();
扫描仪=新扫描仪(行);
scanner.useDelimiter(“,”);
while(scanner.hasNextDouble()){
salesData.add(scanner.nextDouble());
}
scanner.close();
System.out.println(salesData);
}
salesDataFile.close();
}
}
当您在first while()循环中获取每行值时,您可以对该行执行任何操作

        // number of values in file
        int totalNumValues = 0;
        // total sum
        double totalSum = 0;

        while(salesDataFile.hasNextLine()){
            String line = salesDataFile.nextLine();

            ArrayList<Double> salesData = new ArrayList<Double>();

            // total values in this line
            int numValuesInLine = 0;
            // sum in this line
            double sumLine = 0;

            Scanner scanner = new Scanner(line);
            scanner.useDelimiter(",");
            while(scanner.hasNextDouble()){
                  double value = scanner.nextDouble();
                  sumLine = sumLine + value;
                  numValuesInLine++;
                  totalNumValues++;
                  totalSum = totalSum + value;
            }
            scanner.close();

            System.out.println(salesData);
        }
//文件中的值数
int totalNumValues=0;
//总额
双倍总和=0;
while(salesDataFile.hasNextLine()){
String line=salesDataFile.nextLine();
ArrayList salesData=新的ArrayList();
//此行中的总值
int numValuesInLine=0;
//这一行的总和
双集总线=0;
扫描仪=新扫描仪(行);
scanner.useDelimiter(“,”);
while(scanner.hasNextDouble()){
double value=scanner.nextDouble();
sumLine=sumLine+值;
numValuesInLine++;
totalNumValues++;
总和=总和+值;
}
scanner.close();
System.out.println(salesData);
}

我会这样做:

    Scanner salesDataFile = new Scanner(new File("SalesData.txt"));

    ArrayList<ArrayList< double > > salesData = new ArrayList<>();

    while(salesDataFile.hasNextLine() )
    {
        String stringOfNumbers[] = salesDataFile.nextLine().split(",");
        ArrayList< double > aux = new ArrayList<>( stringOfNumbers.length );
        for( int i = 0; i < stringOfNumbers.length; ++i )
           aux.get(i) = Double.parseDouble( stringOfNumbers[i] );
        //... Perform your row calculations ...
        salesData.add( aux );
    }
    salesDataFile.close();

    System.out.println(salesData);
Scanner salesDataFile=新扫描仪(新文件(“SalesData.txt”))
    Scanner salesDataFile = new Scanner(new File("SalesData.txt"));

    ArrayList<ArrayList< double > > salesData = new ArrayList<>();

    while(salesDataFile.hasNextLine() )
    {
        String stringOfNumbers[] = salesDataFile.nextLine().split(",");
        ArrayList< double > aux = new ArrayList<>( stringOfNumbers.length );
        for( int i = 0; i < stringOfNumbers.length; ++i )
           aux.get(i) = Double.parseDouble( stringOfNumbers[i] );
        //... Perform your row calculations ...
        salesData.add( aux );
    }
    salesDataFile.close();

    System.out.println(salesData);