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