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

Wyzwanie z zapisywaniem do pliku z konsoli

Object Storage Arubacloud
+1 głos
134 wizyt
pytanie zadane 22 maja 2020 w Java przez danielo665 Obywatel (1,040 p.)

Witam wszystkim,

Mam kilka nieścisłości związanych z tym kodem

oto rzeczy których nie potrafię zdiagnozować

- Utwórz i użyj obiektu BufferedWriter.

- Program musi zapisywać absolutnie wszystkie wprowadzone linie (łącznie z "exit") do pliku, każdą w nowej linii.

- Metod powinna zamykać obiekt BufferedWriter po jego użyciu.

Może dacie mi jakieś wskazówki co i jak , z tym nie tak.

Oto kod:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.InputStreamReader;

/* 
Zapisywanie do pliku z konsoli
*/

public class Solution {
    public static void main(String[] args) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String line = "";
        try{

            while(!"exit".equals(line)){
                line = reader.readLine();
                System.out.println("Wprowadzony wyraz to : "+ line);
                String content = null;
                try (FileWriter writer = new FileWriter("app.log");
                     BufferedWriter bw = new BufferedWriter(writer)) {

                    bw.write(content);

                } catch (Exception e) {
                    System.err.format("IOException: %s%n", e);
                }
            }
            System.out.println("Koniec wczytywania danych");
        }
        catch(Exception e){
            System.out.println("Bład podczas odczytu strumienia");
        }
        
    }
}

Za rady i porady Dziekuje

komentarz 22 maja 2020 przez VBService Ekspert (254,440 p.)
edycja 22 maja 2020 przez VBService

Pokaż "screen-a" lub wklej komunikat błędu jaki się pokazuje.
Bo u mnie jest taki przy próbie uruchomienia Twojego kodu:


Poprawiony według sugestii debuggera, wygląda tak:
 
Teraz kolejny błąd

poprawiony tak

niby działa dobrze, ale nie zapisuje linii do pliku (plik utworzył się prawidłowo: app.log), reaguje po wpisaniu exit.

Poniżej przepisałem kod jeszcze raz i nieco go zmodyfikowałem.
Mam nadzieję, że nie masz Mi tego za złe. wink

komentarz 23 maja 2020 przez danielo665 Obywatel (1,040 p.)
Kod był pisany w InteliJeju i wsm aż dziwne ze miałeś problemy z otworzeniem.

A co do kodu to bardzo dziękuje za wsparcie zaraz go przeanalizuje, i zdiagnozuje dlaczego i co było do poprawki :)
1
komentarz 23 maja 2020 przez danielo665 Obywatel (1,040 p.)
edycja 23 maja 2020 przez danielo665

Swoją drogą Intelijej nie pokazuje żadnych błędów, Kod wydaje sie komponować poprawnie 

1 odpowiedź

+1 głos
odpowiedź 22 maja 2020 przez VBService Ekspert (254,440 p.)
wybrane 23 maja 2020 przez danielo665
 
Najlepsza

Mam nadzieje, że kod jest czytelny (zrozumiały).


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter; 
import java.io.IOException;
import java.io.InputStreamReader;
 
/* 
Zapisywanie do pliku z konsoli
*/
 
public class Main {

  private static final String ANSI_GREEN = "\u001B[32m";
  private static final String EMPTY_STRING = "";

  public static void main(String[] args) {
    
    FileWriter fw = null;
    String f_name = "app.log";

    try {
      fw = new FileWriter(f_name);
    } catch (IOException e) {
      e.printStackTrace();
    }

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    BufferedWriter bw = new BufferedWriter(fw);

    String r_line = EMPTY_STRING;
    clearCmdScreen();
    System.out.println("");
    System.out.println("Wprowadź tekst:");
    System.out.println("");

    try {
      while(!"exit".equals(r_line)) {
        r_line = br.readLine();
        bw.write(r_line);
        bw.newLine();
      }      
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      System.out.println("");
      System.out.println("Koniec wczytywania danych.");
    }

    try {
      bw.close();
      fw.close();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      System.out.print("Dane zostały zapisane do pliku: ");
      System.out.print(ANSI_GREEN);
      System.out.print(f_name + "\n");
      System.out.println("");      
    }
  }

  public static void clearCmdScreen() {  
    System.out.print("\033[H\033[2J");  
    System.out.flush();  
  }
}

Do przetestowania on-line - tutaj
(clearCmdScreen() , Clear command line console, druga odpowiedź od góry)


Inne kolory do użycia w konsoli:

public static final String ANSI_RESET = "\u001B[0m";
public static final String ANSI_BLACK = "\u001B[30m";
public static final String ANSI_RED = "\u001B[31m";
public static final String ANSI_GREEN = "\u001B[32m";
public static final String ANSI_YELLOW = "\u001B[33m";
public static final String ANSI_BLUE = "\u001B[34m";
public static final String ANSI_PURPLE = "\u001B[35m";
public static final String ANSI_CYAN = "\u001B[36m";
public static final String ANSI_WHITE = "\u001B[37m";

How to print color in console using System.out.println?

  app.log  
(po wpisaniu linia po linii tekstu i zakończenia pisania poleceniem exit.)

Litwo, Ojczyzno moja! ty jesteś jak zdrowie
Ile cię trzeba cenić, ten tylko się dowie,
Kto cię stracił. Dziś piękność twą w całej ozdobie
Widzę i opisuję, bo tęsknię po tobie.
exit

Podobne pytania

0 głosów
2 odpowiedzi 680 wizyt
pytanie zadane 24 listopada 2019 w C i C++ przez Hardwell Dyskutant (8,980 p.)
0 głosów
1 odpowiedź 324 wizyt
pytanie zadane 15 marca 2021 w Java przez Beginner555 Obywatel (1,760 p.)
0 głosów
0 odpowiedzi 115 wizyt
pytanie zadane 20 kwietnia 2020 w Java przez malybyq Użytkownik (980 p.)

92,624 zapytań

141,482 odpowiedzi

319,824 komentarzy

62,006 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!

...