【问题标题】:How to put Output in ArrayList from a file in Local如何从本地文件中将输出放入 ArrayList
【发布时间】:2016-06-06 13:15:19
【问题描述】:

我正在尝试将我的数据分离到多个数组列表中,以便稍后在我的代码中使用它们。但我无法将我的数据放入数组列表中。

我的代码是关于根据各种过滤器将数据分成不同主题的三个数组列表(例如:物理、化学),您可以在我的代码中找到这些列表。

Input data file:

1|150|20150328|20150406|Physics|1600|1600|2|68|92
2|152|20150328|20150406|Physics|1600|1500|2|68|89
3|153|20150328|20150406|Physics|1600|1500|2|68|60
4|155|20150328|20150406|Physics|1600|1600|2|68|72
5|161|20150328|20150406|Chemistry|1600|1600|2|68|77

这是我的代码:

Public Class filter{
  public static void main(String args[])

BufferedReader in= null;
BufferedWriter out= null;
String in_line;
String PrevRollNo= "";
int PrevDate= 0;

ArrayList<transaction> PhysicsList= new ArrayList<transaction>();
ArrayList<transaction> scList= new ArrayList<transaction>();
ArrayList<transaction> Chemistry= new ArrayList<transaction>();

try{
in = new BufferedReader(new FileReader(Path for input file));
File out_file= new File(Path for output file);
if(!out_file.exists())
{
(!out_file.createNewFile();
}

 FileWriter fw=new FileWriter(out_file);
out= new BufferedWriter(fw);

while ((in_line=in.readline())!=null)
{
Transaction transact=new Transaction(in_line);

if(transact.RollNo.equals(PrevRollNo))
{
if(transact.subject.equals("Physics")&& transact.Prs_Date= PrevDate
{
PhysicsList.add(transact);
}
else if(transact.subject.equals("Physics")&&transact.wk_date != PrevDate}

Iterator<Transaction> it;
if(!transact.RoomNo.equals("102")&&!transact.lcl_RoomNo.equals("102");

{
it= scList.iterator();
while(it.hasnext())
{
Transaction sc= it.next();

if(sc.lcl_RoomNo.equals(transact.RoomNo) && sc.l1 equals(tansact.l1) && sc.l2 equals(transact.l2)

if(sc.marks==transact.marks)
{
transact.srsfound= true;
}
else
{
System.out.print.ln( "not found");
}
scList.remove(sc))
out.write(in_line);
break;
}}}}

Static Class Transaction
{
Public String RollNo, Subject, RoomNo, lcl_RoomNo, l1, l2;

Public int wk_date, prs_date;
Public double marks , amt;
Public boolean srcfound, tgtfound;

Public Transaction(String in_line)
{
String [] SplitData= in_line.split("\\|");
RollNo = SplitData[1];
Subject = SplitData[4]
RoomNo = SplitData[5];
lcl_RoomNo = SplitData[6];
l1 = SplitData[7];
l2 = SplitData[8];
wk_date = SplitData[3];
prs_date = SplitData[2];

marks = Double.parsedouble(SplitData[9]);
amt = Double.parsedouble(SplitData[]);
srcfound = false;
tgtfound = false;
}

请帮助您的专业知识。

【问题讨论】:

    标签: java arrays arraylist bufferedreader


    【解决方案1】:

    使用 Java 8 NIO 和 Streams。这会让工作变得轻松。

    Files.lines(Paths.get("fileName.txt")).map(line -> {
        String[] tokens = line.split("|");
        //tokens contains individual elements of each line. Add your grouping logic on tokens array
    }
    

    【讨论】:

    • 您能否建议对当前代码进行更改。我对令牌不熟悉。谢谢
    • @sareen, tokens 只是一个字符串数组。此数组包含分隔符 | 前面的各个单词
    • @K139...我遇到了另一个问题,你看我正在使用transact.Prs_Date= PrevDate 我已经给出了 int PrevDate= 0; & PrevDate = 交易.prs_date。它不适用于第一行和最后一行。你能帮我解决这个问题吗?
    【解决方案2】:

    我在某些方面同意另一个答案。应该使用NIO,它使它变得容易得多。但是,我会避免使用流,而是使用 readAllLines 方法,如下所示:

    try{
        List<String> filecontents = new String(Files.readAllLines(file.toPath()); //file is the object to read from.
        for(int i = 0; i < filecontents.size(); i++){
            String line = lines.get(i);
            //New code starts here
            if(!line.contains("|") continue; //Ignore that line
            //New code ends here
            String[] array = line.split("|");
            ArrayList<String> list = new ArrayList<String>();
            for(int a = 0; a < array.length; a++){
                String part = array[a];
                list.add(part);
            }
            Transaction t = new Transaction(line);
            if(line.contains("Physics") PlysicsList.add(t);
            else if(line.contains("Chemistry") Chemistry.add(t);
            else{ //Do nothing}
        }
    }catch(IOException e){
        e.printStackTrace();
    }
    

    编辑:我在那里添加了一个检查。第一行和最后一行可能不起作用的原因是正在解析的行没有被正确解析。看看这是否能解决您的问题

    【讨论】:

    • 你能解释一下(file.toPath())的事情吗。以及如何使用它?谢谢
    • readAllLines 方法是Files.readAllLines(Path p). java.io.File 类包含一个toPath(); 方法,它将文件转换为路径
    • 非常感谢。我遇到了另一个问题,你看到我正在使用 transact.Prs_Date= PrevDate 我给了 int PrevDate= 0; & PrevDate = 交易.prs_date。它不适用于第一行和最后一行。你能帮我解决这个问题吗?
    • 试着放一个 |在第一个条目的开头和最后一个条目的结尾。这能解决你的问题吗?
    • 不,我不能更改数据文件,我需要在我的代码中进行一些争吵...请提出一些建议
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-09
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多