2016-06-06 2 views
0

데이터를 여러 배열 목록으로 분리하려고합니다. 나중에 코드에서 사용할 수 있습니다. 하지만 배열 목록에 내 데이터를 넣을 수는 없습니다.로컬의 파일에서 ArrayList에 출력을 넣는 방법

내 코드는 내 코드에서 찾을 수있는 다양한 필터마다 다른 주제 (예 : 물리, 화학)의 세 배열 목록으로 데이터를 분리하는 것입니다.

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; 
} 

이 친절하게 귀하의 전문 지식에 도움이 :

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 

여기 내 코드입니다.

답변

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 
} 
+0

현재 코드에서 변경 사항을 제안 해주십시오. 토큰에 익숙하지 않습니다. 감사합니다. – sareen

+0

@sareen,'tokens'는 단지 문자열 배열입니다. 이 배열은 구분 기호 앞의 개별 단어를 포함합니다. – K139

+0

@ K139 ... 다른 문제가 있습니다. 'transact.Prs_Date = PrevDate'를 사용하고 있습니다. int를주었습니다. PrevDate = 0 ; & PrevDate = transact.prs_date. 첫 번째 행과 마지막 행은 작동하지 않습니다. 이 일을 도와 줄 수 있습니까? – sareen

0

몇 가지 방법으로 다른 답변에 동의합니다. 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(); 
} 

편집 : 나는 거기에 체크를 추가했다. 첫 번째 행과 마지막 행이 작동하지 않을 수있는 이유는 파싱 된 행이 제대로 구문 분석되지 않는 경우입니다. 문제가 해결되는지 확인하십시오.

+0

'(file.toPath()) '에 대해 설명해 주실 수 있습니까? 및 사용 방법은 무엇인가요? 감사합니다 – sareen

+0

ReadAllLines 메소드는'Files.readAllLines (Path p)'입니다.'java.io.File' 클래스는 파일을 경로로 변환하는 toPath(); 메소드를 포함하고 있습니다 – JD9999

+0

고마워요. 다른 문제가 있습니다. transact.Prs_Date = PrevDate를 사용했습니다. PrevDate = 0; & PrevDate = transact.prs_date. 첫 번째 행과 마지막 행에 대해서는 작동하지 않습니다. 이걸 내게 허락 해 줄 수 있니? – sareen