2015-11-28 3 views
0

У меня есть этот код:Читать строковые массивы из файла

public static void write() throws IOException{ 
    ObjectOutputStream out = new ObjectOutputStream(
      new FileOutputStream("ips.txt") 
     ); 
    for (int i = 0; i < Main.ipList.length; i++){ 
     out.writeObject(ipList[i]); 
    } 
     out.flush(); 
     out.close(); 
} 

который записывает массив строк в текстовый файл:

static String[] ipList = {"127.0.0.1", "173.57.51.111"}; 

мне было интересно, как можно было бы прочитать текстовый файл и отредактируйте ipList с новыми ips.

ответ

1

Если вы хотите написать String объекты в файл, то лучше использовать FileWriter вместо ObjectOutputStream. Аналогичным образом используйте файл FileReader для чтения из файла. См. https://docs.oracle.com/javase/tutorial/essential/io/charstreams.html о том, как использовать эти объекты Reader.

ObjectOutputStream обычно подходит для написания более сложных объектов, реализующих интерфейс java.io.Serializable.

Вот пример:

BufferedReader inputStream = null; 
List<String> ipList = new ArrayList<>(); 
try { 
    inputStream = new BufferedReader(new FileReader("ips.txt")); 
    String l; 
    while ((l = inputStream.readLine()) != null) { 
     ipList.add(l); 
    } 
} finally { 
    if (inputStream != null) { 
     inputStream.close(); 
    } 
} 

// get an array from the ArrayList 
ipArray = ipList.toArray(new String[ipList.size()]); 
+0

Ok Я его сохранение как FileWriter сейчас, но я не могу получить FileReader к загрузите массив строк. – randomnessthatsfunny

+0

Покажите нам, что вы сделали в обновлении вопроса (ниже вашего старого кода) ... –

+0

Вот мой новый код. Как сделать «в» загруженном массиве? static String [] ipList = {"127.0.0.1", "173.57.51.111"}; \t государственной статической силы чтения() { \t \t попытка { \t \t \t FileReader в = новый FileReader ("ips.txt"); \t \t \t \t \t} задвижка (FileNotFoundException е) { \t \t \t // TODO автоматическая генерация улова Блокировать \t \t \t e.printStackTrace(); \t \t} \t \t \t } \t \t государственной статической силы записи() бросает IOException { \t \t FileWriter из = новый FileWriter ("ips.txt"); \t \t для (int i = 0; i randomnessthatsfunny

-1

Вы можете попробовать что-то вроде этого

package a; 

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.ObjectOutputStream; 
import java.nio.file.Files; 
import java.nio.file.Paths; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.List; 

public class A { 

    static String[] ipList = { "127.0.0.1", "173.57.51.111" }; 

    public static void main(String[] args) { 

     try { 
      write(); 
      update(); 
     } catch (IOException e) { 
      System.err.println(e); 
     } 

     Arrays.asList(ipList).stream().forEach(System.out::println); 
    } 

    // Your method 
    public static void write() throws IOException { 
     ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("ips.txt")); 
     for (int i = 0; i < A.ipList.length; i++) { 
      out.writeObject(ipList[i]); 
     } 
     out.flush(); 
     out.close(); 
    } 

    public static void update() throws IOException { 

     List<String> lines = Files.readAllLines(Paths.get(".", "newIps.txt")); 

     List<String> newIps = new ArrayList<>(); 
     newIps.addAll(Arrays.asList(ipList)); 
     newIps.addAll(lines); 
     ipList = newIps.toArray(ipList); 
    } 
} 

Содержание файла newIps.txt является

0.0.0.0 
192.168.1.1 

Выход программы

127.0.0.1 
173.57.51.111 
0.0.0.0 
192.168.1.1 

Обратите внимание, что Arrays.asList(ipList) возвращает список моста через массив (любые изменения в списке будут видны для массива), поэтому мы делаем putAll