PROJETO: Apontador de Diretórios
Desenvolvedor: Henrique
Data: 10/04/2026
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:
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 ===");
}
}