在JAVA GUI中非常慢的文本文件拆分

时间:2014-02-20 00:59:03

标签: java swing user-interface optimization

我有一个GUI,我想从中打开一个文件。逻辑如下:首先,程序要求一个目录,在该目录中为临时文件创建一个新文件夹。然后,它要求一个包含数据的文件(该文件的一行如下所示:-20 -20 2435.5 2421.4)。然后程序继续将该文件拆分为较小的文本文件。它做我想要的,但它需要很长时间。我不知道如何让它更快。任何人都可以给我任何指示,或解释,为什么需要这么长时间?我之前在GUI之外使用了分割文件的方法,我没有遇到这个问题,所以我想在这种情况下GUI是负责任的。 我会感激任何帮助。

源代码:

public void OpeningFile() throws FileNotFoundException, IOException {

    File folder;
    String filepath;
    Object[] options = {"Ok","Cancel"};  

    int n = JOptionPane.showOptionDialog(null,
        "Choose a folder in which temporary files will be created, \n then open a text file with Raman Mapping",
        "Information",
        JOptionPane.YES_NO_CANCEL_OPTION,
        JOptionPane.DEFAULT_OPTION,
        null,
        options,
        options[1]);

    if (n == 0) {

    fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    fc.setApproveButtonText("Stwórz");
    int returnVal = fc.showOpenDialog(Main.this);


    if (returnVal == JFileChooser.APPROVE_OPTION) {
        folder = fc.getSelectedFile();
        filepath=folder.getAbsolutePath();
        File newFolder=new File(filepath+"/Temp_Raman");
        newFolder.mkdir();

        int returnVal2 = fc2.showOpenDialog(Main.this);


        if (returnVal2 == JFileChooser.APPROVE_OPTION) {
           dane=fc2.getSelectedFile();
           String dane1=dane.getAbsolutePath();
           System.out.println(dane1);
           System.out.println(filepath);
           divideTxt(dane, filepath);
        }
        else{ 
            System.out.println("Cancelled");
        }

    }
    else{ 
        System.out.println("Cancelled");
    }



           // ZAMYKANIE PLIKU:
           try {
             fr.close();
            } catch (IOException e) {
              e.printStackTrace();
            } 
    }
      else{           
        System.out.println("cancelled");       
        }

}

private static void divideTxt(File dane, String filepath) throws FileNotFoundException, IOException{

       List<Integer> XX= new ArrayList<Integer>();
       List<Integer> YY= new ArrayList<Integer>();


       int a=1;
       List<Integer> x= new ArrayList<Integer>();
       List<Integer> y= new ArrayList<Integer>();
       List<Double> t= new ArrayList<Double>();
       List<Double> u= new ArrayList<Double>();


       Scanner sc = new Scanner(dane);
            while (sc.hasNext()) {
              x.add(sc.nextInt());
              y.add(sc.nextInt());
              t.add(sc.nextDouble());
             u.add(sc.nextDouble());
              //sc.nextLine();
          }




       File danePodzielone=new File(filepath+"/Temp_Raman/dane"+a+".txt");
       danePodzielone.createNewFile();
       XX.add(x.get(0));
       YY.add(y.get(0));
       for(int i=0;i<x.size()-1;i++)
       {

           if(x.get(i+1) !=x.get(i)){
               a++;
               danePodzielone=new File(filepath+"/Temp_Raman/dane"+a+".txt");
               danePodzielone.createNewFile();
               XX.add(x.get(i+1));
           }
           else {
           if(y.get(i+1)!=y.get(i)){
               a++;
               danePodzielone=new File(filepath+"/Temp_Raman/dane"+a+".txt");
               danePodzielone.createNewFile();
               YY.add(y.get(i+1));
           }
           else{
              FileWriter fw = new FileWriter(filepath+"/Temp_Raman/dane"+a+".txt",true);


              PrintWriter pw = new PrintWriter(fw);
              pw.write(t.get(i)+" "+u.get(i)+"\n");
              pw.flush();
              pw.close();
           }
           }
        }

      }

0 个答案:

没有答案