Odczyt i zapis z wielolinijkowego pliku

0

Zastanawiam się jaki kod rozwiązałby problem, gdyby ktoś dodał wartości wielowierszowe.

Będę bardzo wdzięczny za jakieś wskazówki. Pozdrawiam
O to dwie metody, które odczytują z pliku i zapisują do pliku.

public static StringContainer fromFile(String fileName, String pattern) throws IOException {
    StringContainer containerFromFile = new StringContainer(pattern);
    try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
        String line;
        while ((line = reader.readLine()) != null) {
            String toAdd = line.replace("\\n", "\n"); // kombinowalem w taki sposob
            containerFromFile.add(toAdd);
        }
    }
    return containerFromFile;
}

public void storeToFile(String fileName) throws IOException {
    try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
        Node current = head;
        while (current != null) {
            String toWrite = current.value.replace("\n", "\\n"); // kombinowalem w taki sposob
            writer.write(toWrite);
            if (current.next != null) {
                writer.newLine();
            }
            current = current.next;
        }
    }
}
4

Ale co ty w zasadzie chcesz zrobić?

co to jest head? co to jest Node?
Rozumiem iż to jest wycinek jakiejś klasy, możesz wkleić całą klasę?

6

My nie wiemy, co to są twoje "wartości wielowierszowe"
Dla mnie wartością wielowierszową jest

Sześć tylko miała armat; wciąż dymią i świecą;
I nie tyle prędkich słów gniewne usta miecą,
Nie tyle przejdzie uczuć przez duszę w rozpaczy,
Ile z tych dział leciało bomb, kul i kartaczy.

i twój paser tego nie łapie

0

Na przykład jest teoretycznie jakaś treść która mieści się w kilku linijkach w pliku.txt z której chce stworzyć JEDEN obiekt a metoda skupia się na liniach

0

Może zanim przejdziemy to implementacji zawiłego algorytmu w konkretnym języku, wytłumaczysz nam trochę swoją jednokierunkową listę node-ów - co to za treść ma zawierać - z uwzględnieniem takich znaków unicode jak NUL (0), CR (0x0D) i LF (0x0A)?

W razie problemów z unikodem możesz zerknąć tutaj: https://www.unicode.org/charts/PDF/U0000.pdf

0

Chodzi o to że jak na przykład:
current.value będzie miało wartosc kret\\n\n\\ngryzie\n\n\n\n\\\n\\n\n\n\\nziemie
To chcemy żeby zapisało i odczytalo to samo

1

Jeśli chcesz użyć najprostszego sposobu, to możesz po prostu skorzystać z Files.readAllLines() oraz Files.write() żeby zapisać dokładny string.

Jeśli chcesz nadal używać BufferedReader(), to po prostu za każdym razem jak używasz readLine() to doklej "\n". i nie musisz nic więcej kombinować. Zapisać możesz po prostu string wprost.

0

Możesz zapisywać najpierw długość tekstu, a potem sam tekst, bez żadnych znaczników końca, to będzie najbardziej uniwersalna metoda. Zrobisz to za pomocą DataOutputStream i odpowiadającej klasy dla wejścia. Metodę wczytującą przesyłam, pozostawiam Ci zapis.

/* ... */

class StringInputStream {
  private DataInputStream stream;

  public StringInputStream (DataInputStream s) {
    stream = s;
  }

  public String readString ()
  throws IOException {
    int length, i;
    String str;
    length = stream.readUnsignedShort ();
    str = "";
    for (i = 0; i < length; ++i)
      str += stream.readChar ();
    return str;
  }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1