Я ищу эффективный способ разбить текстовый файл на набор ArrayList. Текстовый файл - это дамп Thread, и я бы хотел создать список для каждого отдельного потока. Каждый поток разделяется пустой строкой. Например, взятая следующий файл:Java: сплит текстовый файл в несколько списков
"management-handler-thread - 66" prio=10 tid=0x00007fe960111000 nid=0x4cea waiting on condition [0x00007fe96c25c000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000006019cbbd0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2082)
at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
"management-handler-thread - 65" prio=10 tid=0x00007fe968185800 nid=0x4ce9 waiting on condition [0x00007fe96c35d000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x00000006019cbbd0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:226)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2082)
at java.util.concurrent.LinkedBlockingQueue.poll(LinkedBlockingQueue.java:467)
Первый список должен содержать:
"management-handler-thread - 66" prio=10 tid=0x00007fe960111000 nid=0x4cea waiting on condition [0x00007fe96c25c000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
. . .
И второй список должен содержать:
"management-handler-thread - 65" prio=10 tid=0x00007fe968185800 nid=0x4ce9 waiting on condition [0x00007fe96c35d000]
java.lang.Thread.State: TIMED_WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
. . . .
Что бы вы посоветовали сделать ? (Итерация, регулярное выражение ..) Спасибо
Итерация по линиям, вставка в зависимости от считанных данных для правильного списка –
Как большой ваш входной файл? Вы, скорее всего, не хотите загружать большой файл журнала в память сразу, но использовать потоки. –
Почему вы хотите написать результат в ArrayLists? Вы также можете записать их в отдельные файлы напрямую. Используйте BufferedReader для ввода и PrintWriters для выходных файлов, и каждый раз, когда вы сталкиваетесь с пустой строкой, вы записываете текущую запись в соответствующий файл. – SpiderPig