[RESOLVIDO] BufferedReader não lê todo arquivo

Olá amigos, tenho esse código logo abaixo e não consigo ler o texto inteiro que o FileWriter injeta.
Ele só exibe null, então eu coloco no fw.write("\rProgramação em Java") ai da certo,
mas tem uma mameira de ler todo o arquivo sem esse “\r”???
muito obrigado!

[code]import java.io.*;

public class Teste04 {
static public void main(String[] args) {

	File f = new File("arquivo1.txt");
	
	try {

		FileWriter fw = new FileWriter(f);
		fw.write("Programação em Java");//sem colocar "\r"
		fw.flush();
		fw.close();

		Reader fr = new FileReader(f);
		BufferedReader br = new BufferedReader(fr);
		String s = null;
		while (((s = br.readLine()) != null)) {
			System.out.print(br.readLine());

		}

		br.close();

	} catch (IOException e) {

	}
}

}[/code]

esse “\r” serve para ele pular a linha…
olhe ai…

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Damiao
 */


import java.io.*;
import javax.swing.JOptionPane;


public class Teste
{

  public static void main(String[] args) throws IOException
  {
	  File fin = new File("F:\UFS/Teste2.txt");


	    try{
               FileWriter fw = new FileWriter(fin);
               fw.write("Programação em Java");
               fw.close();

	    FileReader fr = new FileReader(fin); // referenciando o arquivo para leitura
	    BufferedReader br = new BufferedReader(fr);
	    String linha = br.readLine();

	    //Percorre todo arquivo
	    while(linha != null)
	    {
              System.out.println(linha);
              linha = br.readLine();

	    }
	     fr.close();
	     System.out.println("O arquivo foi gravdo e lido com Sucesso!!");
	    }
	    catch(IOException e)
	    {
	    	JOptionPane.showMessageDialog(null,"Erro: "+e.toString());
	    }
     }
  }

vlw

Damiao vlw mesmo cara, no while eu tava exibindo br.readLine() de novo, ai ele ja ia ler outra linha, mas como nao tem nada entao da null,
eu tinha que exibir a String s!!!

muito obrigado!

[quote=IronM]Damiao vlw mesmo cara, no while eu tava exibindo br.readLine() de novo, ai ele ja ia ler outra linha, mas como nao tem nada entao da null,
eu tinha que exibir a String s!!!

muito obrigado![/quote]

se ja tirou sua duvida coloca [RESOLVIDO] no titulo do tópico…
vlw

[quote=IronM]Damiao vlw mesmo cara, no while eu tava exibindo br.readLine() de novo, ai ele ja ia ler outra linha, mas como nao tem nada entao da null,
eu tinha que exibir a String s!!!

muito obrigado![/quote]

A partir do Java 5, é mais fácil listar texto com o Scanner:

Scanner scan = new Scanner(fin); while (scan.hasNextLines()) { System.out.println(scan.nextLine()); } scan.close();

Aproveitando este tópico, eu tenho este código abaixo:

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package Java_IO;

import java.io.File;
import java.io.IOException;

/**
*

  • @author murilo
    */
    public class Teste11 {

    public static void main(String[] args) {
    try {
    File d1 = new File("/home/murilo/Área de Trabalho/dir1");
    d1.mkdir();

         File arq1 = new File(d1, "arquivo1.txt");
         arq1.createNewFile();
    
         File arq2 = new File(d1, "arquivo2.txt");
         arq2.createNewFile();
    
         System.out.println(d1.delete());
         arq1.delete();
    
         File d2 = new File("/home/murilo/Área de Trabalho/novodir");
         d1.renameTo(d2);
    
         File novo = new File(d1, "novoarquivo.txt");
         
         arq2.renameTo(novo);
     } catch (IOException e) {
         System.out.println("Erro!!!!!!!!");
     }
    

    }
    }[/code]

no livro está dizendo que arquivo2.txt irá ser renomeado para novoarquivo.txt, porém isso não acontece!!!
ele continua com o nome de arquivo2.txt. Isso tá certo, o livro ta errado?!?! peço de novo a ajuda de vcs.
Muito obrigado

não entendi…
esse codigo tem no livro ou foi vc q fez???
vc quer renomear um arquivo né???
tem alguma coisa gravado nele??
ou vc já pega qulaquer arquivo, e é só pra renomear??

vlw

é só pra renomear!! mas quando eu chamo “arq2.renameTo(novo);”, arquivo2.txt continua com esse nome mesmo.
eu só quero renomear e o arquivo ta vazio. Esse código eu peguei no livro.
vlw

[quote=IronM]é só pra renomear!! mas quando eu chamo “arq2.renameTo(novo);”, arquivo2.txt continua com esse nome mesmo.
eu só quero renomear e o arquivo ta vazio. Esse código eu peguei no livro.
vlw

[/quote]

o arquivo já está salvo na pasta ou vc tem que criar para depois renomear???

se o arquivo já existir vc só precisa de 3 linhas d código…

import java.io.*;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Damiao
 */

public class RenomearArquivo{
    public static void main(String[] args){
        // arquivo com o nome antigo
        File file1 = new File("Aqui vc coloca o endereço completo e o nome do arquivo");
        // arquivo com o novo nome
        File file2 = new File("Aqui vc coloca o endereço junto com o NOVO nome");

        file1.renameTo(file2);
       
    }
}

vlw

Então, “arq2”, que é a referência para o arquivo2.txt, já exite, então eu crio outra referência “novo”, com o caminho do “d1”
ai eu faço o “arq2.renameTo(novo);” e arquivo2.txt continua assim, sendo q no livro diz q era para
ser renomeado para novoarquivo.txt.
vlw

[quote=IronM]Então, “arq2”, que é a referência para o arquivo2.txt, já exite, então eu crio outra referência “novo”, com o caminho do “d1”
ai eu faço o “arq2.renameTo(novo);” e arquivo2.txt continua assim, sendo q no livro diz q era para
ser renomeado para novoarquivo.txt.
vlw[/quote]

a primeira referencia que fiz é para o arquivo q JÀ EXISTE, não sei q nome tem ai…
e o segundo (como vai renomear, vc coloca o mesmo endereço e muda apenas o nome, para o q vc quer deixar ) é o novo arquivo…

pelo q entendi vc tem:
arquivo2.txt (que é o arquivo que VAI ser renomeado né??)
ai vc quer renomear PARA novo.txt…
né isso???
intao vc faz…

[code]
public class RenomearArquivo{
public static void main(String[] args)
{
// arquivo com o nome antigo
File file1 = new File(“C:\SUA_PASTA/arquivo2.txt”);

    // arquivo com o novo nome  
    File file2 = new File("C:\SUA_PASTA/novo.txt");  

    file1.renameTo(file2);  
     
}  

} [/code]

itendeu???
vlw

Entendi, tudo certo, porém acho q esse código q vc deu Damiao é diferente do meu caso, que não esta renomeando,
é isso q eu quero saber. O pq que meu código não está renomeando!!
muito obrigado

[quote=IronM]Entendi, tudo certo, porém acho q esse código q vc deu Damiao é diferente do meu caso, que não esta renomeando,
é isso q eu quero saber. O pq que meu código não está renomeando!!
muito obrigado[/quote]

post ai seu código pra eu dar uma olhadinha…
ver s consigo t ajudar…

vlw

ok…axei seu código…
bom,
seu código tá referenciando 5 arquivos…
o primeiro d1, vc referencia e esse mkdir, axo q retorna um booleano do diretorio!

o segundo arq1, vc está referenciando e tentano criar um arquivo. O terceiro arq2, a msm coisa…

depois vc pede pra deletar o segundo (arq1)…

depois vc referencia OUTRO arquivo, o 4º, chamado d2…

depois vc pega o segundo arquivo (d1) e tenta renomear para d2 (novodir)…

depois vc ainda referencia MAIS UM ARQUIVO chamado novo…
e tenta renomear o arq2 para novo…

não consegui entender sua lógica…

  • se vc APENAS quer renomear…
    eu vou usar seu proprio código…
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package forum;

/**
 *
 * @author Damiao
 */
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */


import java.io.File;

/**
 *
 * @author murilo
 */
public class Renomear {

    public static void main(String[] args) {
        try {
            File d1 = new File("F:\UFS/Estrutura de Dados II/Testes_Arquivos/dir1.txt");


            File arq1 = new File("F:\UFS/Estrutura de Dados II/Testes_Arquivos/arquivo1.txt");


            File arq2 = new File("F:\UFS/Estrutura de Dados II/Testes_Arquivos/arquivo2.txt");


            File d2 = new File("F:\UFS/Estrutura de Dados II/Testes_Arquivos/novodir.txt");//recomendo vc colocar a extensao
            d1.renameTo(d2);

            File novo = new File("F:\UFS/Estrutura de Dados II/Testes_Arquivos/novoarquivo.txt");

            arq2.renameTo(novo);

        } catch (Exception e) {
            System.out.println("Erro!!!!!!!!");
        }
    }
}

resumindo esse código, ai ele está renomeando 2 arquivos…
antes vc tem os arquivos:
dir1.txt
arquivo2.txt
DEPOIS vc tem:
novodir.txt
novoarquivo.txt

pronto…foi isso q eu entendi do seu código…

vlw

me desculpe, esse programa não tem uma lógica mesmo, é só pra testar essas funções e tal.
vou explicar meu código pra vc entender e entao me ajudar nesse meu problema.

primeiro eu crio um um diretório nessas linhas:

File d1 = new File("C:\Users\Murilo\Desktop\dir1");
d1.mkdir();

depois eu crio um arquivo (arquivo.txt) dentro do “dir1”:

File arq1 = new File(d1, "arquivo.txt");
arq1.createNewFile();

novamente eu crio um arquivo (arquivo2.txt) dentro de “dir1”:

File arq2 = new File(d1, "arquivo2.txt");
arq2.createNewFile();

tento deletar a pasta “dir1”, mas não é possível, pois existe arquivos dentro dela,
então deleto arquivo.txt (arq1), isso sim acontece.

d1.delete();
arq1.delete();

crio apenas uma referência de um outro diretório “d2”, e
renomeio o 1º diretório com essa referencia recem criada, o “dir1” tem q ser renomeado para “novodir”, isso da certo:

File d2 = new File("C:\Users\Murilo\Desktop\novodir");
d1.renameTo(d2);

Agora é o problema, crio uma nova referencia de uma arquivo “novoarquivo.txt”, e entao
renomeio o “arq2” (arquivo2.txt) para “novoarquivo.txt”, isso não acontece e não sei pq!!!

File novo = new File("C:\Users\Murilo\Desktop\novoDir\novoarquivo.txt");
arq2.renameTo(novo);

no livro diz q arquivo2.txt é renomeado, mas de fato não acontece!
A saída final deste programa é um diretório “novodir” com um arquivo “novoarquivo.txt”, mas fica apenas “arquivo2.txt”
lembrando que esse código não tem nenhuma lógica mesmo, é apenas um teste do livro.
Muito obrigado

ahhhh…
agora sim entendi o q vc qer…
pronto…já encontrei o erro…

File d1 = new File("C:\Users\Murilo\Desktop\dir1");  //OK
d1.mkdir(); //OK

File arq1 = new File(d1, "arquivo.txt");  //ok
arq1.createNewFile();  //ok

File arq2 = new File(d1, "arquivo2.txt");  //ok
arq2.createNewFile();  //ok

d1.delete();  //ok, não deleta pq tem arquivo dentro...
arq1.delete();

File d2 = new File("C:\Users\Murilo\Desktop\novodir");  //ok
d1.renameTo(d2);  //ok

File novo = new File("C:\Users\Murilo\Desktop\novoDir\novoarquivo.txt");  //ok
arq2.renameTo(novo); //o problema é aki...

vc tá tentano renomear um arquivo que NÃO está nesse diretorio…
prete atenção, a referencia que vc tem de “arq2” é essa “(d1, “arquivo2.txt”)” que d1 é “C:\Users\Murilo\Desktop\dir1” + o arquivo fica:
“C:\Users\Murilo\Desktop\dir1\arquivo2.txt”
concorda???
essa é a referencia que vc tem DE arq2…

e quando vc qer renomear para a referencia do “novo” vc está passando um OUTRO diretorio, o qual foi onde NÂO foi criado o arquivo2.txt…por isso que ele não encontra…

percebeu q os diretorios estão diferentes???
“C:\Users\Murilo\Desktop\DIR1\arquivo2.txt”
e o q vc qer renomear tá:
“C:\Users\Murilo\Desktop\NOVODIR\novoarquivo.txt”

por isso q ele não renomeia, ele vc está referenciando um diretorio diferente do atual…
por isso ele n encontra…

intao, eu proponho que ou vc renomei o arquivo antes de renomear o diretorio, ou vice-versa…

vou mandar o exemplo que fiz assim…

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package forum;

/**
*

  • @author Damiao
    /
    /
  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

import java.io.File;

public class Renomear {

public static void main(String[] args) {
    try {
        File d1 = new File("F:\UFS/Estrutura de Dados II/Testes_Arquivos/dir1");
        d1.mkdir();

         File arq1 = new File("F:\UFS/Estrutura de Dados II/Testes_Arquivos/dir1/arquivo.txt");
        arq1.createNewFile();

        File arq2 = new File("F:\UFS/Estrutura de Dados II/Testes_Arquivos/dir1/arquivo2.txt");
        arq2.createNewFile();

        d1.delete(); //não deleta pq tem arquivo dentro
        arq1.delete();

        File novo = new File("F:\UFS/Estrutura de Dados II/Testes_Arquivos/dir1/novoarquivo.txt");
        arq2.renameTo(novo);
        //RENOMEI O ARQUIVO ANTES DE RENOMEAR A PASTA, SENAO AS REFERENCIAS NÃO VÃO BATER...PERCEBEU QUE SE VC COLOCAR ESSE CÓDIGO DE RENOMEAR POR ULTIMO MUDA A REFERENCIA???


        File d2 = new File("F:\UFS/Estrutura de Dados II/Testes_Arquivos/novodir1");
        d1.renameTo(d2);



    } catch (Exception e) {
        System.out.println("Erro!!!!!!!!");
    }
}

}
[/code]

pronto…agora sim tá OK…
até já testei aki…e deu tudo certinho…
ATÉ Q FIM CONSEGUI ENTENDER O Q VC QERIA…
kkkkkkkkkkkk
vlw

Damiao, muito obrigado mesmo, oq me deixa preocupado é esse livro que diz que o
arquivo2.txt tinha que ser renomeado para arquivonovo.txt!
vlw

[quote=IronM]Damiao, muito obrigado mesmo, oq me deixa preocupado é esse livro que diz que o
arquivo2.txt tinha que ser renomeado para arquivonovo.txt!
vlw[/quote]

ok…= lembre-se quem em livros tb possuem erros…
se já sanou sua duvida, coloca {RESOLVIDO] no titulo do tópico…
vlw