Data Gest - AI

Inteligência que organiza, dados que impulsionam.





PROJETO: Apontador de Diretórios




Preview do projeto - Imagem 1


Desenvolvedor: Henrique

Data: 10/04/2026



Tags:
Java


DESCRIÇÃO:




O sistema foi desenvolvido com o objetivo de gerenciar e organizar o armazenamento de arquivos de forma automática, segura e padronizada dentro do ambiente do usuário. Ele cria uma estrutura própria de diretórios no sistema operacional, permitindo que outros módulos do software salvem e recuperem dados sem a necessidade de caminhos fixos ou configurações manuais.

A principal função do sistema é atuar como uma camada central de gerenciamento de arquivos, garantindo que todas as operações de leitura e escrita ocorram em um local confiável e consistente, independentemente da máquina onde o programa está sendo executado.

O software serve para:
📁 Criar automaticamente um diretório exclusivo da aplicação no computador do usuário
🧠 Identificar a máquina em execução para manter consistência dos dados
💾 Gerenciar o armazenamento de arquivos (como logs, dados e configurações)
📄 Centralizar as configurações em um arquivo JSON
🔄 Facilitar a portabilidade do sistema entre diferentes ambientes

Com isso, o desenvolvedor não precisa se preocupar com caminhos absolutos ou diferenças entre sistemas operacionais.


Como funciona

O funcionamento do sistema é baseado em três etapas principais:

1. Inicialização
Ao iniciar, o software cria automaticamente uma pasta dedicada dentro do diretório do usuário (por exemplo: .meuApp). Essa pasta será utilizada como base para todos os arquivos do sistema.

2. Identificação da máquina
O sistema gera um identificador único baseado no nome da máquina (ou um valor alternativo, caso necessário). Esse identificador é comparado com o que está salvo no arquivo de configuração config.json.
Se for a mesma máquina → o sistema mantém a configuração existente
Se for uma nova máquina → o sistema recria a configuração automaticamente

3. Gerenciamento de arquivos
A partir do diretório base, o sistema permite: Criar subpastas automaticamente Salvar arquivos em locais organizados Ler configurações previamente armazenadas Todas as informações essenciais (como identificador e caminho base) são armazenadas em um arquivo JSON, garantindo fácil leitura e manutenção.


FERRAMENTAS:




🛠️ Ferramentas Utilizadas

O desenvolvimento do software foi realizado utilizando tecnologias nativas da linguagem Java, sem dependência de bibliotecas externas, garantindo maior controle, leveza e portabilidade da aplicação.

☕ Java

📂 API de I/O do Java (java.io)
* File → criação e gerenciamento de pastas
* FileWriter / BufferedWriter → escrita de arquivos
* FileReader / BufferedReader → leitura de arquivos
* Essa API permite o controle direto sobre o sistema de arquivos do usuário.

🌐 API de Rede (java.net)
* Utilizada para obter informações da máquina:
* InetAddress → obtenção do nome do host (identificação do dispositivo)
* Essa informação é usada para diferenciar execuções em máquinas distintas.

🧬 UUID (Identificador Único)
* Utilizado como alternativa caso não seja possível obter o nome da máquina:
* Garante um identificador único
* Evita falhas em ambientes restritos

📄 Formato JSON
* Utilizado para armazenar as configurações do sistema:


CÓDIGO FONTE:


Nível de desenvolvimento: 75%




Classe: Directory

        // Classe principal que serve para entregar de forma dinâmica o caminho dos arquivos
 
        import java.io.*;
        import java.net.InetAddress;
        import java.net.UnknownHostException;
        import java.util.UUID;

        public class Directory {

            private String appDir;
            private String idAtual;
            private String idSalvo;

            private final String CONFIG_FILE = "config.json";

            public Directory() {
                inicializarDiretorio();
                verificarMaquina();
        
            }

            // Cria diretório base
            private void inicializarDiretorio() {
                String userHome = System.getProperty("user.home");
                appDir = userHome + File.separator + ".meuApp" + File.separator;

                File dir = new File(appDir);
        
                if (!dir.exists()) {
                    dir.mkdirs();
            
                }
        
            }

            // Gera identificador da máquina
            private String gerarId() {
                try {
                    return InetAddress.getLocalHost().getHostName();
            
                } catch (UnknownHostException e) {
                    return UUID.randomUUID().toString();
            
                }
        
            }

            // Verifica máquina
            private void verificarMaquina() {
                idAtual = gerarId();

                String json = lerArquivo(CONFIG_FILE);

                if (json != null) {
                    idSalvo = extrairValor(json, "id");
            
                }

                if (idSalvo != null && idSalvo.equals(idAtual)) {
                    System.out.println("Mesma máquina. Config mantida.");
            
                } else {
                    System.out.println("Nova máquina ou primeira execução.");
            
                    salvarConfig();
            
                }
        
            }

            // Salva JSON
            private void salvarConfig() {
                String json = "{\n" +
                        "  \"id\": \"" + idAtual + "\",\n" +
                        "  \"caminho\": \"" + appDir.replace("\\", "\\\\") + "\"\n" +
                        "}";

                salvarArquivo(CONFIG_FILE, json);
        
            }

            // Lê arquivo
            private String lerArquivo(String nome) {
                File arquivo = new File(appDir + nome);
        
                if (!arquivo.exists()) return null;

                StringBuilder conteudo = new StringBuilder();

                try (BufferedReader br = new BufferedReader(new FileReader(arquivo))) {
                    String linha;
            
                    while ((linha = br.readLine()) != null) {
                        conteudo.append(linha);
                
                    }
            
                } catch (IOException e) {
                    e.printStackTrace();
            
                }

                return conteudo.toString();
        
            }

            // Salva arquivo
            private void salvarArquivo(String nome, String conteudo) {
                try (BufferedWriter bw = new BufferedWriter(
                        new FileWriter(appDir + nome))) {

                    bw.write(conteudo);

                } catch (IOException e) {
                    e.printStackTrace();
        
                }
        
            }
    

            // Extrai valor simples do JSON
            private String extrairValor(String json, String chave) {
                String busca = "\"" + chave + "\":";
                int inicio = json.indexOf(busca);

                if (inicio == -1) return null;

                int primeiroAspas = json.indexOf("\"", inicio + busca.length());
                int segundoAspas = json.indexOf("\"", primeiroAspas + 1);

                return json.substring(primeiroAspas + 1, segundoAspas);
        
            }

            // Retorna caminho base
            public String getCaminho() {
                return appDir;
        
            }

            // Cria subpasta
            public String getSubPasta(String nome) {
                String caminho = appDir + nome + File.separator;

                File pasta = new File(caminho);
        
                if (!pasta.exists()) {
                    pasta.mkdirs();
            
                }

                return caminho;
        
            }
    
        }

                        



Classe: TestDirectory

        //Serve para testar a classe principal
        
        import java.io.BufferedWriter;
        import java.io.FileWriter;
        import java.io.IOException;

        public class TestDirectory {

            public static void main(String[] args) {

                System.out.println("=== TESTE COM JSON ===");

                Directory dir = new Directory();

                String base = dir.getCaminho();
                System.out.println("Base: " + base);

                String pasta = dir.getSubPasta("dados");

                String arquivo = pasta + "teste.txt";

                try (BufferedWriter bw = new BufferedWriter(new FileWriter(arquivo))) {

                    bw.write("Arquivo criado usando configuração JSON!");
                    bw.newLine();
                    bw.write("Sistema mais profissional agora.");

                    System.out.println("Arquivo criado com sucesso!");

                } catch (IOException e) {
                    e.printStackTrace();
            
                }

                System.out.println("=== FIM ===");
        
            }
    
        }