• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie dotyczące plików tekstowych - problem z podmianą zawartości (JAVA)

0 głosów
828 wizyt
pytanie zadane 13 stycznia 2021 w Java przez Patryk2001 Początkujący (470 p.)

Hej wszystkim ponownie! Zacząłem pisać nowy program i znowu popełniam błędy. Mam problem z podmianą zawartości pliku tekstowego, bardziej szczegółowo chodzi o to że mam napisać funkcję która będzie szyfrowała zawartość pliku tekstowego ( coś na zasadzie szyfru cezara). Niestety kiedy wywołuję funkcję zawartość pliku która powinna zostać podmieniona znika, a plik zostaje pusty. Popełniam gdzieś błąd tylko nie wiem gdzie, prawdopodobnie napisałem coś bezsensowego :P. Oto treść tego co mam zrobić oraz kod który napisałem:

4. Stworzyć dwie funkcje:

void szyfruj(String nazwaWe, int przesun)

void deszyfruj(String nazwaWe, int przesun)

Funkcja szyfruj dokonuje szyfrowania pliku, którego nazwa podana została jako pierwszy parametr. Szyfrowanie polega na zamianie każdej litery na znak przesunięty o wartość podaną drugim parametrem np. dla przesunięcia równego 2 literka ’a’ powinna zostać zastąpiona literką ’c’, literka ’z’ literką ’b’ itp. Wynikiem działania funkcji ma być plik o nazwie utworzonej na podstawie nazwy pliku wejściowego poprzez dołączenie znaku ’ ’ np. dla pliku dane.txt zaszyfrowana postać powinna mieć nazwę dane.txt. Funkcja deszyfruj powinna deszyfrować plik (niekoniecznie ten sam) zaszyfrowany przez funkcję szyfruj.

package zadanie4;

import java.io.FileReader;
import java.io.IOException;
import java.io.FileWriter;

public class Zadanie4 {

    public static void szyfruj(String nazwaWe, int przesun) throws IOException
    {
        FileReader f = null;
        FileWriter fw = null;
        try
        {
            f = new FileReader("C:/pliki_java/" + nazwaWe);
            fw = new FileWriter("C:/pliki_java/" + nazwaWe);
            int AsciiCode;
            while((AsciiCode = f.read()) != -1)
            {
                AsciiCode += przesun;
                char NowyZnak = (char)AsciiCode;
                fw.write(NowyZnak);
            }                
        }
        finally
        {
            if(f != null)
            {
                f.close();
            }
        }
    }
    
    public static void deszyfruj(String nazwaWe, int przesun)
    {
    }
    
    public static void main(String[] args) throws IOException {
        
        szyfruj("text4.txt",2);
        
    }
    
}

Dziękuję za wszelką pomoc :)

2 odpowiedzi

0 głosów
odpowiedź 13 stycznia 2021 przez Oscar Nałogowiec (29,420 p.)

Nieco namieszałeś.

  1. Czy nazwa pliku we i wy mają być takie same? To po co coś dodawać?
  2. W programie otwierasz dwa razy plik o tej samej nazwie - raz do odczytu i raz do zapisu. To na pewno nie zadziała, tak jakbyś chciał.
  3. W finally zamykasz plik wejściowy. OK, jednak ważniejsze jest zamknięcie pliku wyjściowego, bo przed zamknięciem może nie być kompletny na dysku. Oczywiście jak program się kończy to wszystko jest zamykane, ale niekoniecznie na poziomie programu - czyli np. bufory w bibliotekach Javy mogą zostać nie zapisane.
  4. Jednak daje się napisać w Javie kod nieprzenośny.
komentarz 13 stycznia 2021 przez Wiciorny Ekspert (283,580 p.)

2 W programie otwierasz dwa razy plik o tej samej nazwie - raz do odczytu i raz do zapisu. To na pewno nie zadziała, tak jakbyś chciał.

dlaczego można nawet jednocześnie wczytać  litere z tekstu i zapisać inną w jej miejscu :)  

0 głosów
odpowiedź 19 stycznia 2021 przez Czarus0 Obywatel (1,040 p.)

Zapoznałbym się dodatkowo z BufferedReader i BufferedWriter, na pewno program będzie działał wydajniej. Dodatkowo także przeczytaj sobie o metodzie flush() do zapisu.

Tak jak mój przedmówca wspomniał, musisz zamknąć obydwa strumienie danych - ten do zapisu i odczytu. Zapis i odczyt musi odbywać się także na innych plikach, chyba, że zaczytasz całą zawartość pliku do pamięci, przerobisz ją i następnie nadpiszesz istniejący plik.

Podobne pytania

0 głosów
1 odpowiedź 764 wizyt
0 głosów
1 odpowiedź 220 wizyt
pytanie zadane 12 stycznia 2021 w Java przez sobussss Początkujący (350 p.)
0 głosów
1 odpowiedź 673 wizyt
pytanie zadane 16 października 2022 w Python przez benny13 Obywatel (1,150 p.)

93,800 zapytań

142,768 odpowiedzi

323,461 komentarzy

63,421 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...