我有一个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();
}
}
}
}