Copiar parte de um arquivo

Pessoal, boa tarde!

Imaginem que tenho um arquivo txt e quero copiar apenas parte dele.
O formatoto do arquivo seria mais ou menos assim:

Header
blabablabalbala (essa parte seria sempre diferente)

INICIO

campo1;campo2;campo3;…
campo1;campo2;campo3;…
campo1;campo2;campo3;…
campo1;campo2;campo3;…
campo1;campo2;campo3;…

FIM

Preciso copiar apenas os campos, ou seja, o que esta entre o INICIO e o FIM…

Como posso fazer isso???

Valeu…[color=“red”][/color]

bom como o teu arquivo é um .txt
facilita a vida, basta carregar o teu arquito para memória
e usar manipulação de String para recuperar a Substring
desejada…

no teu caso vc vai ter que saber qual a posição onde
você irá iniciar a leitura da substring e onde irá parar…

como nesse caso você tem um layout de aquivo, basta localizar a palavra:

INICIO ( mais precisamente saber qual a posição do O na atual String )
FIM( mais precisamente saber qual a posição do F na atual String )

tendo esses indices basta usar o método substring( inicio, fim ) do String
para recuperar a parte que lhe interessa :wink:

mas ainda tem outras alternativas, caso tenha os espaços em branco
como parte do teu layout de arquivo vc pode utilizar o método split
da String tendo como parametro ‘\n’ para separar e gerar o array,
apos tendo o array basta saber qual o indice da String que fica entre
INICIO e FIM :razz:

Erko, valeu pela ajuda…

Eu fiz como vc disse, mas funcionou mais ou menos qdo eu mando gravar o arquivo de saida em um novo txt ele sai assim:

campo1;campo2;campo3;…campo1;campo2;campo3;…campo1;campo2;campo3;…campo1;campo2;campo3;…campo1;campo2;campo3;…

mas no console aparece assim:

campo1;campo2;campo3;…
campo1;campo2;campo3;…
campo1;campo2;campo3;…
campo1;campo2;campo3;…
campo1;campo2;campo3;…

Segue o codigo:

import java.io.*;


class LeArquivo{
   
   public static void main(String args[]) throws IOException{
      
      long contador = 0;
      
      //LE O ARQUIVO
      BufferedReader arq = new BufferedReader(new FileReader("C:/Testes/IN/teste.txt"));
      String linha = "";
      String textoInicial = "", textoFinal = "";
      String inicio = "", fim = "";
      System.out.println("Começou a leitura do arquivo!!!");
      
      while(!(linha = arq.readLine()).equals("FIM")){
         textoInicial += linha;
         textoInicial += "\n";
         contador ++;
      }
      
      textoFinal = textoInicial.substring(6);
      
      
      System.out.println("Terminou a leitura dos arquivos");
      System.out.println(textoInicial);
      System.out.println("Começou a escrita dos arquivos!!!");
      
      //GRAVA O ARQUIVO
      FileOutputStream arq2;
      PrintStream ps;
      
      try{
         arq2 = new FileOutputStream("C:/Testes/OUT/arq.txt");
         ps = new PrintStream(arq2);
         ps.println(textoFinal);
         ps.close();
      } catch (FileNotFoundException e) {
         System.err.println
            ("Erro na tentativa de abrir o arquivo");
      } catch (IOException ex) {
         System.err.println
            ("Erro na escrita do arquivo"+args[0]);
      }
      
      
      
      System.out.println("Terminou a escrita dos arquivos");
      System.out.println(textoFinal);
      System.out.println("O total de registros copiados é: " + contador);
      try {arq.close();
      } catch (IOException ex) {
         ex.printStackTrace();
      }
      
   }
}

Valeu…

UP!!!

Alguem ai sabe como evitar isso que esta acontecendo??

Valeu…

Tá, não simplesmente copia, tenta entender o que eu fiz:

public static void main(String args[]) {

		String in = "arquivo de entrada;
		String out = "arquivo de saida";

		long contador = 0;
		List linhas = new ArrayList();

		// LE O ARQUIVO
		String linha = "";
		System.out.println("Começou a leitura do arquivo!!!");

		BufferedReader arqr = null;
		try {
			arqr = new BufferedReader(new FileReader(in));
			boolean iniciado = false;
			while ((linha = arqr.readLine()) != null) {
				if (linha.trim().equals("FIM"))
					break;
				if (iniciado) {
					linhas.add(linha);
					contador++;
				}
				if (linha.trim().equals("INICIO"))
					iniciado = true;
			}
		} catch (FileNotFoundException e) {
			System.err.println("Arquivo não encontrado");
			return;
		} catch (IOException e) {
			System.err.println("Erro na leitura do arquivo");
			return;
		} finally {
			if (arqr != null) {
				try {
					arqr.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

		System.out.println("Começou a escrita dos arquivos!!!");

		// GRAVA O ARQUIVO
		BufferedWriter arqw = null;
		try {
			arqw = new BufferedWriter(new FileWriter(out));
			for (int i = 0; i < linhas.size(); i++) {
				arqw.write((String) linhas.get(i));
				arqw.newLine();
			}
		} catch (FileNotFoundException e) {
			System.err.println("Erro na tentativa de abrir o arquivo");
		} catch (IOException ex) {
			System.err.println("Erro na escrita do arquivo" + args[0]);
		} finally {
			if (arqw != null) {
				try {
					arqw.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

		System.out.println("Terminou a escrita dos arquivos");
		System.out.println("O total de registros copiados é: " + contador);
	}
}

tava estranho a forma como vc lia o arquivo, jogando em uma string e depois dando substring de não sei oq… então refiz, gravo numa lista cada linha e depois uso BufferedWriter para gerar o novo arquivo, la existe um método chamado newLine.

agora eu te desafio a fazer o mesmo programa sem usar uma lista, abrindo um BufferedReader e um BufferedWriter ao mesmo tempo, lendo e ja gravando em um outro arquivo :wink:

Acho que o problema é o caractere que indica nova linha.
No windows é \r\n (ou o contrário).

Tenta abrir esse mesmo arquivo no wordpad.