Sto cercando un modo per leggere i file di testo grandi.Ho trovato un codice in rete che per me è il migliore : http://andreafrancia.it/articoli/large-file-viewer/
Ci sta un problema però....nella stama mi salta sempre la prima riga come mai?
Posto il codice
codice:
public class LazyFileListModel extends AbstractListModel {
private static Logger logger =
Logger.getLogger(LazyFileListModel.class.getName());
private RandomAccessFile lineCounterFile;
private List<Long> linePositions =
Collections.synchronizedList(new ArrayList<Long>());
private RandomAccessFile readerFile;
public LazyFileListModel(File file) throws FileNotFoundException {
this.lineCounterFile = new RandomAccessFile(file, "r");
this.readerFile = new RandomAccessFile(file, "r");
Runnable lineCounterThread = new Runnable() {
public void run() {
try {
String line;
while ((line = lineCounterFile.readLine()) != null) {
linePositions.add(lineCounterFile.getFilePointer());
Thread.yield();
}
linePositions.remove(linePositions.size() - 1);
} catch (IOException ex) {
logger.log(Level.SEVERE, "", ex);
}
}
};
Executors.newSingleThreadExecutor().submit(lineCounterThread);
Runnable firer = new Runnable() {
public void run() {
int last = -1;
int current = linePositions.size() - 1;
if (last < current) {
fireIntervalAdded(LazyFileListModel.this, last + 1, current);
last = current;
}
}
};
Executors.newScheduledThreadPool(1).scheduleAtFixedRate(firer, 2, 500,
TimeUnit.MILLISECONDS);
}
public int getSize() {
return linePositions.size();
}
public Object getElementAt(int index) {
try {
readerFile.seek(linePositions.get(index));
return String.format("%06d: %s", index, readerFile.readLine());
} catch (IOException ex) {
logger.log(Level.SEVERE, "", ex);
return null;
}
}
}