Code d'une fonction "sauvegarder" depuis java dans un fichier excel
Bonjour,
Je développe un outil pour lequel j'ai besoin de coder une fonction "sauvegarder".
J'ai fait le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
public void save(File f)
{
PrintWriter printWriter = null;
try {
String file = f.getAbsolutePath().substring(0, f.getAbsolutePath().length()-4);
int nbLines = occurences(dataTextPane.getText(), "\n");
int curLine = 0;
int nbLineInOneFile = 0;
String text = "";
int start = 0;
int end = dataTextPane.getText().indexOf("\n");
String header = dataTextPane.getText().substring(start, end+1);
int fileNb = 0;
while(curLine < nbLines)
{
while (nbLineInOneFile < NB_LINES_MAX_IN_EXCEL && end >= 0)
{
String line = dataTextPane.getText().substring(start, end+1);
// At most 3 tabs in a row...
// Do not know how to do it properly
line = line.replaceAll("\t\t", "\t");
line = line.replaceAll("\t\t", "\t");
text = text.concat(line);
start = end + 1;
end = dataTextPane.getText().indexOf("\n", start);
curLine++;
nbLineInOneFile++;
}
File fTmp = new File(file + String.valueOf(fileNb)+".xls");
// Opens the file in writing
printWriter = new PrintWriter(new FileWriter(fTmp));
// Writes the text in the file
printWriter.print(text);
// Closes the file
printWriter.close();
fileNb++;
// Repeats header at the beginning of each file
text = "".concat(header);
// Initialized to 1 to include header line
nbLineInOneFile = 1;
}
} catch (Exception ex) {
Log.println(Log.ERROR, "Error while saving the file.");
// Closes the file
printWriter.close();
}
} |
Les données à sauvegarder sont dans la JTextArea dataTextPane et font entre 300 000 et 400 000 je pense, c'est pour ça que j'essaie de sauver en plusieurs fichiers excel de 65536 lignes max.
Forme :
Champ1 Champ2 Champ3...
Champ1 Champ2 Champ3...
etc.
Le code en lui-même fonctionne, mais quand j'ai la totalité des données, ça prend trop longtemps ! (Le plus long que j'ai attendu, c'est 2h, et le save n'était toujours pas fini).
Après un peu de profiling, il semblerait que ce soit le dataTextPane.getText() qui prenne du temps. Mais je suppose que s'il arrivait à passer cette instruction, ce serait le "replaceAll", puis le "concat" qui bloqueraient...
Y a-t-il un moyen d'optimiser ça ?
Merci !