Uma pequena ajuda/Duvida em leitura e escrita?

9 respostas
R

Bom, meu programa terá um botao SALVAR, onde salvar dados de host, login e senha separados por ;

meu programa sera levado num jar… quero saber, o arquivo .txt onde será gravado o .txt devera ficar dentro ou fora do JAR??? caso seja dentro, caso o usuario mude a senha ou host, como ele gravará no txt?
caso fique fora do JAR porem no mesmo local onde o jar será executado, como seria a sintaxe de criação? seria File(“arquivo.txt”), ai qdo eu executar o JAR, independente da pasta que eu esteja, ele vai entender q arquivo.txt ta na mesma pasta que ele, e o jar ira ler ou escrever sobre o mesmo??? caso negativo, como faria isso entao???

outra duvida, meu txt armazenara apenas o nome host, login e senha…minha aplicação usa um JPasswordField… porem na hora de gravar, como gravo de forma que quem leia o txt nao saiba a senha(nao precisa ser nada complexo ja que é aplicação de apenas de envio de email do servidor local)…
agradeço a todos.

9 Respostas

vtdb11
Tem duas opções:

1ª: Usar o método getClass().getResourceAsStream(nome do arquivo.txt) onde vc obtém uma InputStream ou null se o arquivo não existir. Para salvar um FileWriter sendo que o path é getClass().getResource(nome do arquivo.txt).getFile();

2ª: Usar o método getClass().getResource(nome do arquivo.txt) onde vc obtém uma URL, e usar um openConnection(), obtendo uma URLConnection, a qual fornece o InputStream e o OutputStream, respectivamente pelos métodos getInputStream() e getOutputStream();

Obs: Caso o arquivo esteja no próprio computador, A URLConnection lançará um erro ao tentar obter o OutputStream;

Para salvar a senha codifique.
Para codificar:
Escolha uma chave numérica. Ex: 3
Ao escrever escreva um char de cada vez, somando-o a chave; Ao ler subtraia.

Espero que tenha sido de utilidade.

vtdb11

Resumindo: Caso seja local use a 1ª opção
Caso não use a 2ª

R

vtdb11:
Resumindo: Caso seja local use a 1ª opção
Caso não use a 2ª

vlw vtdb11…
mas uma duvida… entao para ler eu faço
File file = new File(getClass().getResourceAsStream(“arquivo.txt”) e para escrever eu faria FileWriter writer = new FleWriter(getClass().getResource(“arquivo.txt”).getFile(); ???
sim, o arquivo sera usado localmente…

voce poderia fazer pequenos exemplos para clarear melhor???

vtdb11

Não.
Fica assim:

//Só como exemplo
BufferedInputStream input = new BufferedInputStream((getClass().getResourceAsStream(""));
FileOutputStream output = new FileOutputStream(getClass().getResource("").getFile());
vtdb11

O exemplo:

public void gravaDados(String texto) {
     FileOutputStream output = new FileOutputStream(getClass().getResource("").getFile());
     output.write(texto.getBytes());
}

public String lerDados() {
     BufferedInputStream input = new BufferedInputStream((getClass().getResourceAsStream(""));
     StringBuffer texto = new StringBuffer();
     for (int i = input.read(); i != -1; i = in.read()) {
          texto.appendCodePoint(i);
     }

     return texto.toString();
}
vtdb11

Só uma correção:
Como você vai escrever texto, use Writers e Readers.
Fica assim:

public void gravaDados(String texto) {
      FileWriter output = new FileWriter(getClass().getResource("").getFile());
      output.write(texto.toCharArray());
      //Escrevendo a senha
      for (char atual: senha.toCharArray()) {
            output.write(atual + 1);
      }
 }
 
 public String lerDados() {
      BufferedReader input = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("")));
      StringBuffer texto = new StringBuffer();
      for (int i = input.read(); i != -1; i = in.read()) {
           texto.append((char)i);
      }
 
      return texto.toString();
 }

public String lerSenha() {
      //Lendo a senha
      StringBuffer pass = new StringBuffer();
      for (int i = input.read(); i != -1; i = in.read()) {
            pass.append((char)(i - 1));
      }

      return pass.toString();
}

Espero ter ajudado.

R

opa, vou testar amigo vtdb11 …
só uma ultima duvida, o arquivo devera ser previamente criado e criado na raiz do projeto ne? ou ele cria sozinho no local onde foi executado o jar???

vtdb11

O arquivo será criado na pasta onde estão os .class.
O arquivo precisa sim ser criado antes, senão, getResource(""), que é usado na gravação, retornará null
Caso precise criar o arquivo com o programa use uma URL padrão (da pasta onde será escrito o arquivo), e na criação da File, use ele como parent e como child o nome do arquivo.

Para descomplicar:

private static final String CHILD = "nome do arquivo.extensão do arquivo";\O nome do arquivo, sem a pasta

public void gravaDados(String texto) {
      URL parent = getClass().getResource("").getFile();\A pasta
      FileOutputStream output = new FileOutputStream(new File(parent, CHILD));
      output.write(texto.getBytes());
 }
 
 public String lerDados() {
      StringBuffer texto = new StringBuffer();
      InputStream temp = getClass().getResourceAsStream("");
      if (temp != null) {
           BufferedInputStream input = new BufferedInputStream(temp);
           for (int i = input.read(); i != -1; i = in.read()) {
               texto.appendCodePoint(i);
           }
      }
      else {
           texto.append(\*String padrão*\);
      }
      return texto.toString();
 }
R

vlw vtdb11, funcionou blz :smiley:

Criado 30 de junho de 2007
Ultima resposta 2 de jul. de 2007
Respostas 9
Participantes 2