Acessar aquivo de texto dentro do jar

Boa noite a todos… Tenho um arquivo de texto com ceps e endereços que salvei dentro do projeto em um pacote so para aquivos que criei. Como faço para acessar esse .txt no .jar da aplicação, tentei algumas coisa mais não consegui… E também é possivel gravar alguma informação nesse arquivo mesmo estando dentro do jar ?

Abre o .JAR no WinRar

Não.

Se foi você mesmo quem fez, você vai ter os fontes, é só ajeitar e compilar de novo.

Se não foi você quem fez, não mexa no JAR dos outros. É crime previsto em lei alteração de propriedade intelectual sem permissão.

Normalmente a estrutura de projetos Java é parecida com esta:

├── build.gradle
└── src
    └── main
        ├── java
        │   └── app
        │       └── App.java
        └── resources
            └── lista-de-ceps.txt

Se este for o seu caso, vc consegue ler facilmente o conteúdo da pasta resources da seguinte forma:

package app;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class App {
  public static void main(String... args) { // @formatter:off
    try (
      var is = App.class.getClassLoader().getResourceAsStream("lista-de-ceps.txt");
      var isr = new InputStreamReader(is);
      var br = new BufferedReader(isr)
    ) {
      br.lines().forEach(line -> {
        System.out.println("CEP: " + line);
      });
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
1 curtida

É uma aplicação que estou fazendo.

Estou um usando o netbeans ele não encontrou a classe App… O que pode ser?

App foi o nome que eu dei para minha classe principal, vc tem que substituir pelo nome da sua própria classe.

Eu fiz daquele jeito…

App.class.getClassLoader().getResourceAsStream("lista-de-ceps.txt");

… Porque eu estou invocando a partir de um método estático.

Se vc estiver ler a partir de um método não-estático, vc faria algo assim:

package app;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class LeitorDeCep {
  void lerCep() {
    try (var is = this.getClass().getClassLoader().getResourceAsStream("lista-de-ceps.txt");
        var isr = new InputStreamReader(is);
        var br = new BufferedReader(isr)) {
      br.lines().forEach(line -> {
        System.out.println("CEP: " + line);
      });
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

public class App {
  public static void main(String... args) { // @formatter:off
    LeitorDeCep leitor = new LeitorDeCep();
    leitor.lerCep();
  }
}

Entendi.