一般建议?用于JAVA中ACH的缓冲读写器的GUI

时间:2015-09-18 16:27:39

标签: java user-interface batch-processing

几周前我在这里发布了关于我工作的项目的信息。该项目开始时创建一个简单的小程序,它将接收传入的ACH文件并读取每一行。该程序还会要求用户提供原因代码"和"银行"这将影响下一步。然后,程序将以某种方式重新格式化所有数据并将其保存到外部文件中。对于那些不了解的人来说,ACH只是一个基于文本的文件,具有非常具体的格式。 (每个角色和空间都有意义。)

我已经使用一些GUI项目(Jcombobox,JFileChooser等),字符串数组列表,缓冲读取器/写入器以及许多if / else语句完成了该任务。

现在这个任务已经扩展到更加复杂,我不知道如何开始,所以我想我会寻求社区的建议。

当一个ACH文件进来时,它将采用如下格式:

101 100000000000000000000000000000
522 00000202020382737327372732737237
6272288381237237123712837912738792178
6272392390123018230912830918203810
627232183712636283761231726382168
822233473498327497384798234724273487398
522 83398402830943240924332849832094
62723921380921380921382183092183
6273949384028309432083094820938409832
82283409384083209482094392830404829304
900000000000000000000000000000000
9999999999999999999999999999999999999
9999999999999999999999999999999999999

(我将通过&#34引用每一行;"数字,例如" 1个数字"是以1开头的行)

最终结果是数据线被人工化并放入批次"。输出文件以" 1号码开头#34; 然后包含格式为

的批处理
5
6
8
5
6
8
5
6
8

我们继续使用相同的" 5号码"直到原始文件中的所有六个都已写入,然后我们转到下一个" 5"并与" 6"低于它。

所以,我的项目现在是创建一个完整的GUI。在用户输入文件之后,GUI将具有某种类型的下拉框或类似的所有" 6"数字。对于每个号码,应该有另一个下拉框来选择原因代码(有7个原因代码)。

基本上,最终目标是:

  1. 显示所有" 6"数字,并让用户能够为每个数字选择原因代码。
  2. 允许用户仅选择一定数量的" 6"数字,如果他们愿意。

    我可以使用Buffered Reader / Writer进行此操作吗?我目前使用以下代码将值保存到数组列表中:

                while((sCurrentLine = br.readLine()) !=null)//<---------This loop will continue while there are still lines to be read. 
                {
                    if (sCurrentLine.startsWith("5")){//<------------------If the line starts with "5"..
                        listFive.add(sCurrentLine);//<-------------------------Add the line to the array list "listFive".
                        countFive++;//<---------------------------------------------Increase the counter "countFive" by one. 
                    }else if (sCurrentLine.startsWith("6") && countFive==1){//<---------If the line starts with "6" and countFive is at a value of 1..
                        listSix.add(sCurrentLine);//<---------------------------------------Add the line to the array list "listSix".
                    }else if (sCurrentLine.startsWith("6") && countFive==2){//<-----------------If the line starts with "6" and countFive is at a value of 2..
                        listSixBatchTwo.add(sCurrentLine);//<--------------------------------------Add the line to the array list "listSixBatchTwo".
                    }else if (sCurrentLine.startsWith("6") && countFive==3){//<-----------------------If the line starts with "6" and countFive is at a value of 3..
                        listSixBatchThree.add(sCurrentLine);//<------------------------------------------Add the line to array list "listSixBatchThree".
                    }else if (sCurrentLine.startsWith("6") && countFive==4){//<------------------------------If the line starts with "6" and countFive is at a value of 4..
                        listSixBatchFour.add(sCurrentLine); //<--------------------------------------------------Add the line to array list "listSixBatchFour".
                    }else if (sCurrentLine.startsWith("8")){//<-----------------------------------------------------If the line starts with "8"..
                        listEight.add(sCurrentLine);//<----------------------------------------------------------------Add the line to array list "listEight".
                    }else if (sCurrentLine.startsWith("1")){//<-----------------------------------------------------------If the line starts with "1"..
                        one = sCurrentLine;//<-------------------------------------------------------------------------------Save the line to String "one". 
                    }else if (sCurrentLine.startsWith("9") && count9 == 1){//<---------------------------------------------------If the line starts with "9" and count9 is at a value of 1..
                        nine = sCurrentLine;//<-------------------------------------------------------------------------------------Save the line to String "nine".
                        count9 = 0;//<--------------------------------------------------------------------------------------------------Set count9 to a value of 0. 
                    }else if (sCurrentLine.startsWith("999") && count9 == 0){//<-----------------------------------------------------------If the line starts with "999" and count9 is at a value of 0..
                        listNine.add(sCurrentLine);//<---------------------------------------------------------------------------------------Add the line to array list "listNine".
                    }else{
                    }
                }
    
  3. 如果有人能指出我可以开始的地方,我将非常感激。如果您需要更多信息,请告诉我。

    更新

    以下是我的JOptionPane决策制定示例。

    String[] choices = {"Wells Fargo", "Bank of America", "CitiBank", "Wells Fargo Legacy", "JPMC"};
                String input = (String) JOptionPane.showInputDialog(null, "Bank Selection", "Please choose a bank: ", JOptionPane.QUESTION_MESSAGE, null,   choices, choices[0]);
                if (input.equals("Wells Fargo"))
                {
                    bank = "WELLS FARGO";
    
                }else if (input.equals("Bank of America")){
                    bank = "BANK OF AMERICA";
    
                }else if (input.equals("CitiBank")){
                    bank = "CITI BANK";
    
                }else if (input.equals("Wells Fargo Legacy")){
                    bank = "WELLS FARGO LEGACY";
    
                }else if (input.equals("JPMC")){
                    bank = "JPMC";
    
    
                }
                }else{
    
                }
    

    我们假设我想使用Buffered Writer来保存所有&#34; 6&#34;将数字放入String数组中,然后将它们放入GUI中的下拉框中。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

  

您可以在GUI中使用Buffered Writer的输入吗?

好吧,BufferedWriter不是用来获取输入而是用于输出信息,但假设你的意思是BufferedReader,那么答案肯定是肯定的。理解GUI和使用BufferedReader获取数据是正交概念 - 它们都可以独立于另一个工作。涉及使用Bufferedhaving GUI进行数据读取的主要问题

  

以一个JOptionPane为例。

我不确定你在这里是什么意思或者这与它有什么关系。

  

如果是,那我该怎么办呢?在我看到的所有示例和关于JOptionPane的教程中,一切都是在main方法之前完成的。如果我需要在JOptionPane输入中包含if语句怎么办?我怎么能做到这一点?

我不确定你的意思是“一切都在主要方法之前完成”,但听起来你可能已经超越了自己。在担心螺母和螺栓以及代码的具体位置之前,请考虑一下您的程序将具有哪些类/对象,以及它们将如何交互 - 即,它们将具有哪些方法。

  

我相信我只是想知道如何先行。有人可以验证吗? 1.创建表示将要读取的行的静态变量。 (例如静态ArrayList。

不,不要考虑静态的任何东西,因为一旦你这样做,你就离开OOP领域并进入程序编程。主要数据应保存在一两个类中的实例变量中。

  
      
  1. 在主方法之外创建实际的GUI。
  2.   

我不确定你的意思是“在main方法之外”,但是GUI将包含多个类,可能是一个主类,并且主类的实例在主方法中很少创建,或者在main方法调用的方法,但排队到Swing事件线程。

  
      
  1. 创建Buffered Reader,它将写入main方法内#1中提到的变量。
  2.   

同样,我不会这样做。主要方法应该简短,非常短,其存在的原因只是启动你的关键对象并设置它们运行,就是这样。应该在其中做任何重要的事情(除了我所陈述的内容之外)。你在想小玩具程序,那不是你正在写的东西。读者应该是自己类中的实例变量。它可以通过GUI通过控件类间接启动,控件类是响应GUI事件的类。如果在创建GUI之前需要数据,那么您将使用main方法创建读取数据的类,要求它获取数据,然后创建GUI类,将数据传递给它。