-2

如何运行两个类,其中一个在文本文件中提供一些数据,另一个应该获取该文件并处理它?

我有两个 Java 文件。File1处理一些东西并输出一个文本文件。File2应该获取该文本文件并对其进行处理以创建最终输出。

我的要求是有两个独立的 java 文件一起工作。

文件 1

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
import java.util.Map;
import java.util.TreeMap;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;

public class FlatFileParser 
{
    public static void main(String[] args)
    {
        try 
        {
            // The stream we're reading from
            BufferedReader in;
            List<String> ls = new ArrayList<String>();
            BufferedWriter  out1 = new BufferedWriter(new FileWriter("inValues.txt" , true ));
            BufferedReader out11 = new BufferedReader(new FileReader("inValues.txt"));
            // Return value of next call to next()
            String nextline;
            String line="";
            if (args[0].equals("1"))
            {
                in = new BufferedReader(new FileReader(args[1]));
                nextline = in.readLine();
                while(nextline != null)
                {
                    nextline = nextline.replaceAll("\\<packet","\n<packet");
                    System.out.println(nextline);
                    nextline = in.readLine();
                }
                in.close();
            }
            else
            {
                in = new BufferedReader(new FileReader(args[1]));
                nextline = in.readLine();
                HashMap<String,String> inout = new HashMap<String,String>();
                while(nextline != null)
                {
                    try
                    {
                        if (nextline.indexOf("timetracker")>0)
                        {
                            String from = "";
                            String indate = "";
                            if (nextline.indexOf("of in")>0)
                            {
                                int posfrom = nextline.indexOf("from");
                                int posnextAt = nextline.indexOf("@", posfrom);
                                int posts = nextline.indexOf("timestamp");
                                from = nextline.substring(posfrom+5,posnextAt);
                                indate = nextline.substring(posts+11, posts+23);
                                String dd = indate.split(" ")[1];
                                String key = dd+"-"+from+"-"+indate;
                                //String key = from+"-"+indate;
                                String intime = "-in-"+nextline.substring(posts+24, posts+35);
                                inout.put(key, intime);     
                            }
                            else if (nextline.indexOf("of out")>0)
                            {
                                int posfrom = nextline.indexOf("from");
                                int posnextAt = nextline.indexOf("@", posfrom);
                                int posts = nextline.indexOf("timestamp");
                                from = nextline.substring(posfrom+5,posnextAt);
                                indate = nextline.substring(posts+11, posts+23);
                                String dd = indate.split(" ")[1];
                                String key = dd+"-"+from+"-"+indate;
                                String outtime = "-out-"+nextline.substring(posts+24, posts+35);
                                if (inout.containsKey(key))
                                {
                                    String val = inout.get(key);
                                    if (!(val.indexOf("out")>0))
                                    inout.put(key, val+outtime);             
                                }
                                else
                                {
                                    inout.put(key, outtime);
                                }
                            }
                        }
                    }
                    catch(Exception e)
                    {
                        System.err.println(nextline);
                        System.err.println(e.getMessage());
                    }
                        nextline = in.readLine();    
                }
                in.close();     
                for(String key: inout.keySet())
                {
                    String val = inout.get(key);
                    out1.write(key+" , "+val+"\n");
                }
                out1.close();
            }
        } 
        catch (IOException e)
        {
            throw new IllegalArgumentException(e);
        }
    }

文件2

import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.io.File;
import java.io.FileReader;

public class RecordParser 
{
    private static BufferedReader reader;

    private List<Person> resource;

    private List<String> finalRecords;

    public RecordParser(BufferedReader reader) 
    {
        this.reader = reader;
        this.resource = new ArrayList<Person>();
        this.finalRecords = new ArrayList<String>();
    }

    public void execute() throws IOException 
    {
        String line = null;
        while ((line = reader.readLine()) != null) 
        {
            String[] parts = line.split(" , ");
            addPerson(new Person(parts[0]));
            if ((parts[1].contains("-in-")) && (parts[1].contains("-out-"))) 
            {
                String[] inout = parts[1].split("-out-");
                Person person = getPerson(parts[0]);
                person.setInTime(inout[0]);
                person.setOutTime("-out-" + inout[1]);
            } 
            else if (parts[1].contains("-in-")) 
            {
                Person person = getPerson(parts[0]);
                person.setInTime(parts[1]);
            } 
            else 
            {
                Person person = getPerson(parts[0]);
                person.setOutTime(parts[1]);
            }
        }

        // finalRecords the resource to the String list
        for (Person p : resource) 
        {
            finalRecords.add(p.getPerson());
        }
    }

    private void addPerson(Person person) 
    {
        for (Person p : resource) 
        {
            if (p.getNameDate().equals(person.getNameDate())) 
            {
                return;
            }
        }
        resource.add(person);
    }

    private Person getPerson(String nameDate) 
    {
        for (Person p : resource) 
        {
            if (p.getNameDate().equals(nameDate)) 
            {
                return p;
            }
        }
        return null;
    }

    public List<String> getfinalRecords() 
    {
        return finalRecords;
    }

    public static void main(String[] args) 
    {
      try {
                  BufferedReader reader = new BufferedReader(new FileReader("sample.txt"));
                  RecordParser recordParser = new RecordParser(reader);
                  recordParser.execute();

                  for (String s : recordParser.getfinalRecords()) 
                  {
                      System.out.println(s);
                  }
                  reader.close();
              } catch (IOException e) 
                 {
                     e.printStackTrace();
                 }
    }

    public class Person 
    {
        private String nameDate;
        private String inTime;
        private String outTime;

        public Person (String nameDate) 
        {
            this.nameDate = nameDate;
            this.inTime = "missing in";
            this.outTime = "missing out";
        }

        public void setInTime(String inTime) 
        {
            this.inTime = inTime;
        }

        public void setOutTime(String outTime) 
        {
            this.outTime = outTime;
        }

        public String getNameDate() 
        {
            return nameDate;
        }

        public String getPerson() 
        {
            StringBuilder builder = new StringBuilder();
            builder.append(nameDate);
            builder.append(" , ");
            builder.append(inTime);
            builder.append(" , ");
            builder.append(outTime);
            return builder.toString();
        }

    }

}

我希望能够从inValues.txt(创建于File1)导入值并在File2.

4

1 回答 1

0

创建一个批处理/sh 文件并一个接一个地运行一个 java 程序。如果要将文件详细信息传递给第二个程序,可以通过提供运行时参数来实现。

在窗户上:

java -classpath .;yourjars FlatFileParser
java -classpath .;yourjars RecordParser {optionalfiledetails}

在 Linux 上

java -classpath .:yourjars FlatFileParser
java -classpath .:yourjars RecordParser {optionalfiledetails}
于 2013-07-12T09:24:15.317 回答