• 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)

Object Storage Arubacloud
0 głosów
333 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,320 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 (270,190 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ź 596 wizyt
0 głosów
1 odpowiedź 102 wizyt
pytanie zadane 12 stycznia 2021 w Java przez sobussss Początkujący (350 p.)
0 głosów
1 odpowiedź 228 wizyt
pytanie zadane 16 października 2022 w Python przez benny13 Obywatel (1,150 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...