Я пытаюсь создать конвертер из структурированного TXT в таблицу Excel, и у меня возникают проблемы с чтением файла TXT и правильное хранение данных.Java: как разобрать структурированный TXT-файл?
Файл TXT дается со следующим содержанием:
-
HOSTNAME: hostname1
IP: ipAddress1
DEVICE INFO:
ИМЯ: deviceName1_1, SERIALNUMBER: serialNumber1_1
-
HOSTNAME: hostname2
IP : ipAddress2
ИНФОРМАЦИЯ О УСТРОЙСТВЕ:
ИМЯ: deviceName2_1, SERIALNUMBER: serialNumber2_1
ИМЯ: deviceName2_2, SERIALNUMBER: serialNumber2_2
ИМЯ: deviceNam e2_3, SERIALNUMBER: serialNumber2_3
-
HOSTNAME: hostname3
IP: ipAddress3
DEVICE INFO:
ИМЯ: deviceName3_1, SERIALNUMBER: serialNumber3_1
ИМЯ: deviceName3_2, SERIALNUMBER: serialNumber3_2
Пожалуйста, обратите внимание, что это TXT файл имеет 3 блоки информации. Каждый блок информации разделен специальным символом «-». Файл TXT может иметь более или менее блоки информации. Под информация об устройстве может быть более или менее строк наименований устройств и серийных номеров.
Ожидается, что он проанализирует файл и сохранит данные в созданных объектах.
Объект должен иметь следующие поля:
String hostname;
String ip;
String name;
String serialnumber;
Обычно один объект может быть создан на блок информации. Если под информацией устройства есть несколько строк имени устройства и серийных номер, то несколько объекты должны быть созданы с тем же именем хоста и IP, но другое имя устройства и серийный номер ,
Ожидаемый результат:
Всего 6 объектов должны быть созданы со следующими данными.
Объект # 1 имеет hostname1, ipAddress1, deviceName1, serialNumber1
Объект # 2 имеет hostname2, ipAddress2, deviceName2_1, serialNumber2_1
Объект # 3 имеет hostname2, ipAddress2, deviceName2_2, serialNumber2_2
Объект # 4 имеет hostname2, ipAddress2 , deviceName2_3, serialNumber2_3
Объект # 5 имеет hostname3, ipAddress3, deviceName3_1, serialNumber3_1
Объект # 6 имеет hostname3, ipAddress3, deviceName3_2, serialNumber3_2
До сих пор я пытался писать этот код:
private ArrayList<Device> readFile() {
ArrayList<Device> devices = new ArrayList<Device>
BufferedReader br = null;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(txtFile)));
String line = "";
String data;
int i=0;
while ((line = br.readLine()) != null) {
// Device device = new Device();
if (line.equals("-")) {
// Device device = new Device();
while ((line = br.readLine()) != null) {
Device device = new Device();
if (line.contains("HOSTNAME: ")) {
// Device device = new Device();
if (line.substring(0,10).equals("HOSTNAME: ")) {
device.setHostname(line.substring(10,line.length()));
devices.add(device);
}
}
if (line.contains("IP: ")) {
// Device device = new Device();
if (line.substring(0,4).equals("IP: ")) {
device.setIp(line.substring(4,line.length()));
devices.add(device);
}
}
devices.add(device);
}
}
}
}
Но объекты имеют имя хоста, но IP является NULL или наоборот. Я также пробовал этот код:
try {
Scanner scanner = new Scanner(txtFile);
int i = 0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String array[] = line.split(",");
DeviceData device = new DeviceData(array[0],array[1]);
System.out.println("Eilute " + (i++) + ": " + array[0]);
}
Но я потерялся здесь.
У меня возникли проблемы с разделением желаемых данных и их помещением в объекты. Как я должен делать это правильно, как ожидалось? Любые идеи и/или предложения?
Вы можете добавить чек для символа -, а затем просто выполнить цикл и проверить следующую строку, пока не достигнете конца документа. –
@SvenOlderaan Да, я добавил чек для символа «-», он показан в моем фрагменте кода _if (line.equals («-»)) {_ , и я попытался сделать еще один цикл с while. Но он по-прежнему дает мне строку за строкой, и я не могу поместить данные в каждый объект для каждого цикла. – ig90