2013-07-24 26 views
2

编写代码打开Jframe,在那里扫描条码,读取并进入正确的文件,搜索cust_number并读取该行并写入新文件。我得到两个问题,请帮助我!谢谢!!Java代码,搜索文件中的数字和读取行

这里是我的代码:

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.BufferedReader; 
import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.FileWriter; 
import java.io.IOException; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextArea; 


public class searchfile2 { 

    /** 
    * @param args 
    */ 

    public static void delFileFromDir(String dirPath) { 
     File dir = new File(dirPath); 
     if(dir.listFiles() == null) 
      return; 
     for(File file: dir.listFiles()) 
     { 
      if(!file.isDirectory()) 
       file.delete(); 
     } 
    } 


    public static void main(String[] args) throws IOException { 
     // TODO Auto-generated method stub 

     final JFrame frame = new JFrame("Scan Here: "); 
     JPanel panel = new JPanel(); 

     final JTextArea text = new JTextArea(20, 40); 
     JButton button = new JButton("Enter"); 

     frame.add(panel); 
     panel.add(text); 
     panel.add(button); 

     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 

       BufferedReader br = null; 
       BufferedWriter bfAll = null; 

       String scanner = (text.getText()); 
       //System.out.println(scanner); 

       try { 
        for (String s : scanner.split("\n")) { 
         String[] actionID = s.split("\\|"); 
         String cust_num = actionID[0]; 
         String date = actionID[1]; 
         String type = actionID[2]; 
         //System.out.println(cust_num + "  Type:  " + type); 

         if(type.equals("BW")){ 
          //System.out.println(type); 

          File folderBW = new File("prod\\BW"); 
          File[] BFFileBW = folderBW.listFiles(); 

          String reprintbw = ("out\\" + "BWreprintrecord" + ".txt"); 
          bfAll = new BufferedWriter(new FileWriter(reprintbw)); 


          for (File file1 : BFFileBW) { 
           String strbw = file1.getName(); 
           //System.out.println(strbw); 


           if((date.subSequence(0, 2)).equals(strbw.subSequence(0, 2)) && (date.substring(2, 4)).equals(strbw.subSequence(3, 5)) && (date.subSequence(4, 6)).equals(strbw.subSequence(8, 10))){ 
            System.out.println("hdssdjsshdghjsdghjsdghjsdghjsdgjhsd    " + strbw); 

            File foldertotalcountlettersdate = new File("prod\\BW\\" + strbw); 
            File[] listOfFilestotalcountlettersdate = foldertotalcountlettersdate.listFiles(); 

            String totalcountlettersdate; 

            try{ 
             for (int itotalcountdate = 0; itotalcountdate < listOfFilestotalcountlettersdate.length; itotalcountdate++) { 
              if (listOfFilestotalcountlettersdate[itotalcountdate].isFile()) { 
               totalcountlettersdate = listOfFilestotalcountlettersdate[itotalcountdate].getAbsolutePath(); 
               System.out.println("File Name: " + totalcountlettersdate); 

               br = new BufferedReader(new FileReader(totalcountlettersdate)); 
               String line; 
               line = br.readLine(); 
               bfAll.write(line); 
               bfAll.newLine(); 
               line = br.readLine(); 
               bfAll.write(line);bfAll.newLine(); 
               line = br.readLine(); 
               bfAll.write(line);bfAll.newLine(); 
               line = br.readLine(); 
               bfAll.write(line);bfAll.newLine(); 
               line = br.readLine(); 
               bfAll.write(line);bfAll.newLine(); 
               line = br.readLine(); 
               bfAll.write(line);bfAll.newLine(); 
               line = br.readLine(); 
               bfAll.write(line);bfAll.newLine(); 

               while ((line = br.readLine()) != null) { 

                String[] actionIDprod = line.split("\\|"); 
                String typeprod = actionIDprod[3]; 
                String typeprodname = actionIDprod[4]; 

                if(typeprod.equals(cust_num)) { 
                 line = br.readLine(); 
                 System.out.println(line); 
                 System.out.println(cust_num + "-------" + typeprodname); 
                } 
               } 
               br.close(); 

              } 
             } 
            } catch(Exception e2) { 
             e2.printStackTrace(); 
            } 

           } 
          } 

          bfAll.newLine(); 
          bfAll.flush(); 
          bfAll.close(); 
         } 

        } 

       } catch(Exception e1) { 
        e1.printStackTrace(); 
       } 

       frame.dispose(); 
      } 
      }); 
     frame.setSize(500, 400); 
     frame.setVisible(true); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 

} 

问题是在写文件该行..

bfAll.write(line); 

其仅写一行最后一个。我需要写在所有行一个文件,我认为它的替换!请帮帮我!!谢谢!!

而且在Jframe! 我扫描的是:

027421940|072213|BW| 
600295885|072113|BW| 
600253827|072113|BW| 
600295333885|072113|LETTERS| 

搜索在文件中的所有027421940 cust_number ::阅读该行写在文件.. 但是,它在文件中只写一行..我认为它的替代,这就是为什么!请帮我,我不知道!先谢谢了!!

回答

1

readline读取当前指针。一旦你找到正确的线,看起来你只是想打印出你已有的“线”的值,而不是读下一行。

+0

谢谢你!它的工作现在!! :)它正在写这行!我怎么能在一个文件中写出所有的行?请帮帮我!!它只写一行文件..我想它取代,请帮助我!谢谢!! –

+0

你会想在第一个'for'循环之外创建你的BufferedWriter。现在,每次为每行创建一个新的writer,这就是为什么你只能在文件中获得一行。 – Choker

+0

非常感谢你!它工作!! :)再次感谢! –

相关问题