2
respostas

Desafio: hora da prática

Crie um programa em Java que escreva a seguinte mensagem em um arquivo chamado "arquivo.txt": "Conteúdo a ser gravado no arquivo." Utilize as classes do pacote java.io.

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

public class Pricipal {
    public static void main(String[] args) throws IOException {
        FileWriter escrita = new FileWriter("arquivo.txt");
        escrita.write("Conteúdo a ser gravado no arquivo.");
        escrita.close();
    }
}

Defina uma classe chamada Titulo com os atributos necessários. Em seguida, crie um programa que instancia um objeto Titulo, serializa esse objeto para JSON usando a biblioteca Gson e imprime o resultado.

import com.google.gson.Gson;
import java.io.IOException;

public class Pricipal {
    public static void main(String[] args) throws IOException {
        Titulo titulo = new Titulo("Peaky Blinders", 2013, "Série");

        Gson gson = new Gson();
        String json = gson.toJson(titulo);

        System.out.println(json);
    }
}


public class Titulo {
private String nome;
private int anoDeLancamento;
private String tipo;

public Titulo(String nome, int anoDeLancamento, String tipo) {
    this.nome = nome;
    this.anoDeLancamento = anoDeLancamento;
    this.tipo = tipo;
}

@Override
public String toString() {
    return "Nome: " + nome + " / Ano de Lançamento: " + anoDeLancamento + " / Tipo: " + tipo;
}
}

Modifique o programa anterior para que o JSON gerado seja formatado de maneira mais elegante. Utilize o método setPrettyPrinting para alcançar esse resultado.

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.IOException;

public class Pricipal {
    public static void main(String[] args) throws IOException {
        Titulo titulo = new Titulo("Peaky Blinders", 2013, "Série");

        Gson gson = new GsonBuilder()
                .setPrettyPrinting()
                .create();

        String json = gson.toJson(titulo);

        System.out.println(json);
    }
}

public class Titulo {
    private String nome;
    private int anoDeLancamento;
    private String tipo;

    public Titulo(String nome, int anoDeLancamento, String tipo) {
        this.nome = nome;
        this.anoDeLancamento = anoDeLancamento;
        this.tipo = tipo;
    }

    @Override
    public String toString() {
        return "Nome: " + nome + " / Ano de Lançamento: " + anoDeLancamento + " / Tipo: " + tipo;
    }
}

Defina uma classe chamada Veiculo com os atributos necessários. Em seguida, crie um programa que instancia um objeto Veiculo, serializa esse objeto para JSON usando a biblioteca Gson e imprime o resultado.

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import java.io.IOException;

public class Pricipal {
    public static void main(String[] args) throws IOException {
        Veiculo veiculo = new Veiculo("Tiida", "Nissan", 2012, "Preto");

        Gson gson = new GsonBuilder()
                .setPrettyPrinting()
                .create();

        String json = gson.toJson(veiculo);
        System.out.println(json);
    }
}

public class Veiculo {
    private String modelo;
    private String marca;
    private int ano;
    private String cor;

    public Veiculo(String modelo, String marca, int ano, String cor) {
        this.modelo = modelo;
        this.marca = marca;
        this.ano = ano;
        this.cor = cor;
    }

    @Override
    public String toString() {
        return "Veiculo{" +
                "modelo='" + modelo + '\'' +
                ", marca='" + marca + '\'' +
                ", ano=" + ano +
                ", cor='" + cor + '\'' +
                '}';
    }
}
2 respostas

Olá "chará" rsrs, tudo na paz?

Parabéns pela resolução dos exercícios! O código ficou bem estruturado e a utilização do setPrettyPrinting no Gson faz toda a diferença na legibilidade do JSON.

Aqui vai uma sugestão rápida para deixar seu código ainda mais robusto: no primeiro exemplo, você pode usar o try-with-resources. Isso garante que o arquivo seja fechado automaticamente, mesmo que ocorra algum erro durante a escrita, dispensando o escrita.close().

Java
try (FileWriter escrita = new FileWriter("arquivo.txt")) {
escrita.write("Conteúdo a ser gravado no arquivo.");
} catch (IOException e) {
e.printStackTrace();
}

Parabéns pela dedicação e por compartilhar!

BY P A N T R O X via auxílio de I.A Gemini, lebre-se de sempre revisar, fazer manualmente e principalmente entender a lógica ;)

Estou a montar uma library em Java com o objetivo de contribuir para a comunidade. A library chama-se Obsidian
e é um acervo de APIs para diversos fundamentos.

Vocês também podem contribuir com o projeto; ele é open-source e está disponível no GitHub.

Eu usei e refatorei todos os seus códigos a fim de testar os sistemas que o Obsidian disponibiliza, e este foi o resultado:

Desafio 1

Escrever num arquivo.txt

package com.github.nadezhdkov;

import io.obsidian.dotenv.processor.DotenvBinder;
import io.obsidian.file.File;

public class Main {
    public static void main(String[] args) {
        Path path = new Path();
        DotenvBinder.bind(path);

        File.at(path.getPath())
                .create()
                .write("Hello World!");
    }
}
package com.github.nadezhdkov;

import io.obsidian.dotenv.annotations.Env;
import io.obsidian.dotenv.annotations.RequiredEnv;

public class Path {
    
    @Env("PATH")
    @RequiredEnv(message = "PATH is required")
    public String filePath;

    public Path() {
    }

    public String getPath() {
        return filePath;
    }
}

2 Desafio

Converter um Object para Json e mostrar seu display

package com.github.nadezhdkov.application;

import com.github.nadezhdkov.model.Title;
import io.obsidian.file.File;
import io.obsidian.json.io.JsonFiles;

import java.nio.file.Paths;

public class Main {
    public static void main(String[] args) {
        String path = "config.json";

        Title title = Title.builder()
                .title("Inception")
                .yearOfRelease(2010)
                .genre("Science Fiction")
                .build();
        
        JsonFiles.write(Paths.get(path), title);

        String json = File.at(path).readAllText();

        System.out.println(json);
    }
}
package com.github.nadezhdkov.model;

import io.obsidian.json.annotations.JsonName;
import lombok.Builder;
import lombok.ToString;

@Builder
@ToString(of = {"title", "yearOfRelease", "genre"})
public class Title {

    @JsonName("title")
    private String title;

    @JsonName("year")
    private int yearOfRelease;

    @JsonName("genre")
    private String genre;

}
{"title":"Inception","year":2010,"genre":"Science Fiction"}

3 Desafio

So fazer o Json ficar formatado

package com.github.nadezhdkov.application;

import com.github.nadezhdkov.model.Title;
import io.obsidian.file.File;
import io.obsidian.json.api.*;
import io.obsidian.json.io.JsonFiles;

import java.nio.file.Paths;

public class Main {
    public static void main(String[] args) {
        String path = "config.json";

        Title title = Title.builder()
                .title("Inception")
                .yearOfRelease(2010)
                .genre("Science Fiction")
                .build();

        JsonMapper mapper = Json.configure()
                .prettyPrint(true)
                .buildMapper();

        JsonFiles.write(Paths.get(path), title, mapper);

        String json = File.at(path)
                .create()
                .readAllText();

        System.out.println(json);
    }
}
package com.github.nadezhdkov.model;

import io.obsidian.json.annotations.JsonName;
import lombok.Builder;
import lombok.ToString;

@Builder
@ToString(of = {"title", "yearOfRelease", "genre"})
public class Title {

    @JsonName("title")
    private String title;

    @JsonName("year")
    private int yearOfRelease;

    @JsonName("genre")
    private String genre;

}
{
  "title": "Inception",
  "year": 2010,
  "genre": "Science Fiction"
}

4 Desafio

O mesmo do anterior, criar uma class e serializa-la para Json.

package com.github.nadezhdkov.application;

import com.github.nadezhdkov.model.Vehicle;
import io.obsidian.json.api.*;

public class Main {
    public static void main(String[] args) {
        Vehicle vehicle = Vehicle.builder()
                .model("Tiida")
                .brand("Nissan")
                .year(2012)
                .color("Black")
                .build();

        JsonMapper mapper = Json.configure()
                .prettyPrint(true)
                .buildMapper();

        JsonElement encoded = mapper.encode(vehicle);
        String      json    = mapper.stringify(encoded);

        System.out.println(json);
    }
}
package com.github.nadezhdkov.model;

import lombok.*;

@Builder
@ToString( of = {"model", "brand", "year", "color"})
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class Vehicle {

    private String model;
    private String brand;
    private int year;
    private String color;

}