Boa tarde, sou novo na programação e estou tendo dificuldade em criar um código pra ler vários arquivos TXT e cópiar as informações para um arquivo so, saltando linha
Desenvolvi esse código até agora, mas não está lendo mais de um arquivo e não está saltando linha
package Ler;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
public class Teste6 {
public Teste6() {
// TODO Auto-generated constructor stub
}
public static void main(String[] args) {
File diretorio = new File("C:\\Arq\\");
File arquivo = null;
File[] arquivos = null;
FileReader fr = null;
BufferedReader br = null;
String linha = "";
File arquivoDestino = new File("C:\\Arq\\new.txt");
FileOutputStream fos = null;
try {
// if (diretorio.isDirectory()) {
arquivos = diretorio.listFiles();
for (int i = 0; i < arquivos.length; i++) {
arquivo = arquivos[i];
}
fr = new FileReader(arquivo);
br = new BufferedReader(fr);
fos = new FileOutputStream(arquivoDestino);
while ((linha = br.readLine()) != null) {
fos.write(linha.getBytes());
}
// }
fos.write("\n".getBytes());
fos.close();
} catch (FileNotFoundException fnex) {
fnex.printStackTrace();
} catch (IOException ioex) {
ioex.printStackTrace();
}
}
}
File File = null;
File file = null;
int index = TXTUtilities.TXTIA.GetTXTLineIndex.Get_TXT_File_LineIndex(File);//pegar numero de linhas do txt
ArrayList<String> content = TXTUtilities.ReadTXT.Read_TXT_File(File, index);//File = txt que vc quer ler | index = numero de linhas
String[] Content_Array = new String[content.size()];
TXTUtilities.CreateTXT.CreateTXTFile(file);
for(int i = 0;i<content.size();i++){
Content_Array[i] = content.get(i);//Converter List para Array
}
TXTUtilities.WriteTXT.Write_Array_TXT_File(file, Content_Array);//file = SEU TXT | content = Array contendo seus textos.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
public class Teste6 {
public static void main(String[] args) {
try {
Teste6 programa = new Teste6();
programa.executar();
} catch (Throwable t) {
t.printStackTrace();
}
}
private List<String> linhasCopiadas;
private void executar() throws IOException {
File diretorio = new File("C:\\Arq\\");
File arquivoDestino = new File("C:\\Arq\\new.txt");
PrintWriter destino = new PrintWriter(arquivoDestino);
linhasCopiadas = new ArrayList<>();
for (File arquivo : diretorio.listFiles()) {
BufferedReader origem = new BufferedReader(new FileReader(arquivo));
copiar(origem, destino);
destino.println();
origem.close();
}
destino.flush();
destino.close();
}
private void copiar(BufferedReader origem, PrintWriter destino) throws IOException {
String linha = null;
while ((linha = origem.readLine()) != null) {
if (!linhasCopiadas.contains(linha)) { // se a linha ainda não foi copiada pro arquivo de destino
destino.println(linha); // copia a linha no arquivo de destino
linhasCopiadas.add(linha); // joga a linha na lista de linhas copiadas
}
}
destino.println(); // pular linha no arquivo de destino
}
}
Esta funcionado perfeitamente. Entre um arquivo e outro esta ficando muito espaço, pode me explicar como retiro esse espaço sem deixar uma informação copiada ficar na frente da outra?
Já consegui obrigado, teria como definir o formatos do arquivo a ser copiado ? por exemplo quero jogar as informações para um arquivo que já tem alguma informações e não quero que ela apaguem. Como faço?
estou fazendo uma função para ler o arquivo primeiro e comparar as linhas já contidas no arquivo antes de inserir, mas agarrei aqui e estou com duvida. Poderia me ajudar a proceder
package Unificar;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
public class Unificar {
public static void main(String[] args) {
try {
Unificar programa = new Unificar();
programa.executar();
} catch (Throwable t) {
t.printStackTrace();
}
}
private List<String> linhasCopiadas;
private void executar() throws IOException {
File diretorio = new File("C:\\Arq"); // Pasta de origem
File arquivoDestino = new File("C:\\Users\\Belmires\\Desktop\\Teste.txt"); // Pasta do novo arquivo criado
PrintWriter destino = new PrintWriter(arquivoDestino);
linhasCopiadas = new ArrayList<>();
BufferedReader ler = new BufferedReader(new FileReader(arquivoDestino));
ler(){
}
for (File arquivo : diretorio.listFiles()) {
BufferedReader origem = new BufferedReader(new FileReader(arquivo));
copiar(origem, destino);
origem.close();
}
destino.flush();
destino.close();
}
// Função que compara as linhas
private void copiar(BufferedReader origem, PrintWriter destino) throws IOException {
String linha = null;
while ((linha = origem.readLine()) != null) {
if (!linhasCopiadas.contains(linha)) { // Se a linha ainda não foi copiada pro arquivo de destino
destino.println(linha); // Copia a linha no arquivo de destino
linhasCopiadas.add(linha); // Joga a linha na lista de linhas copiadas
}
}
}
private void ler (BufferedReader destino){
try {
while (destino.ready()){
linhasCopiadas.add(destino.readLine());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
identar texto pré-formatado por 4 espaços
Será que é possível incluir vários diretórios? Por exemplo, se eu utilizar um pendrive com esse programa, provavelmente o diretório muda. Seria possível utilizar mais que um diretório padrão? Como posso fazer para esse caso específico: File diretorio = new File("C:", "D:", "N:" ...); ?
Não tem como criar uma variável geral para isso?
Programa considere a String Diretorio = “://”; para vários diretórios e inclua sempre um novo arquivo também.
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class Teste6 {
public static void main(String[] args) {
try {
Teste6 programa = new Teste6();
programa.executar();
} catch (Throwable t) {
t.printStackTrace();
}
}
private List<String> linhasCopiadas;
private void executar() throws IOException {
String Diretorio = “://”; // C://, D://, F::// ... n diretorios
try {
Diretorio urlDiretorio = new Diretorio (diretorio );
InputStreamReader stream = new InputStreamReader(urlDiretorio, File Diretorio = new File("Diretorio "); ); // adicionar pasta com o nome Arq
}
File arquivoDestino = new File("Diretorio", \\new.txt);
PrintWriter destino = new PrintWriter(arquivoDestino);
linhasCopiadas = new ArrayList<>();
for (File arquivo : diretorio.listFiles()) {
BufferedReader origem = new BufferedReader(new FileReader(arquivo));
copiar(origem, destino);
destino.println();
origem.close();
}
destino.flush();
destino.close();
}
private void copiar(BufferedReader origem, PrintWriter destino) throws IOException {
String linha = null;
while ((linha = origem.readLine()) != null) {
if (!linhasCopiadas.contains(linha)) { // se a linha ainda não foi copiada pro arquivo de destino
destino.println(linha); // copia a linha no arquivo de destino
linhasCopiadas.add(linha); // joga a linha na lista de linhas copiadas
}
}
destino.println(); // pular linha no arquivo de destino
}
}
Estou querendo fazer a comparação antes “=” usando o split, para inserir a linha toda caso o valor da chave não seja igual, e fazer uma varredura no arquivo destino para comparar as linhas já contidas no arquivo e inserir apenas linhas novas. Estou pedindo demais, mas que sou nova na programação, agradeço desde já.
package Ler;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
public class Unificar {
public static void main(String[] args) {
try {
Unificar programa = new Unificar();
programa.executar();
} catch (Throwable t) {
t.printStackTrace();
}
}
private List<String> linhasCopiadas;
private void executar() throws IOException {
// Pasta de origem
File diretorio = new File("C:\\Arq");
// Pasta do novo arquivo a ser criado
File arquivoDestino = new File("C:\\Users\\p808176\\Desktop\\Teste.txt");
PrintWriter destino = new PrintWriter(arquivoDestino);
linhasCopiadas = new ArrayList<>();
BufferedReader ler = new BufferedReader(new FileReader(arquivoDestino));
ler(BufferedReader origem){
String linha = null;
while ((linha = origem.readLine()) != null) {
chaveValor = linha.split("=");
}
}
for (File arquivo : diretorio.listFiles()) {
BufferedReader origem = new BufferedReader(new FileReader(arquivo));
copiar(origem, destino);
origem.close();
}
destino.flush();
destino.close();
}
// Função que compara as linhas para não se repetir
private void copiar(BufferedReader origem, PrintWriter destino) throws IOException {
String linha = null;
String[] chaveValor;
while ((linha = origem.readLine()) != null) {
chaveValor = linha.split("=");
// System.out.println(chaveValor[0]);
// System.out.println(chaveValor[1]);
if (!linhasCopiadas.contains(chaveValor[0])) { // Se a linha ainda não foi copiada pro arquivo de destino
destino.println(linha); // Copia a linha no arquivo de destino
linhasCopiadas.add(chaveValor[0]); // Joga a linha na lista de linhas copiadas
}
}
}
private void ler (BufferedReader destino){
try {
while (destino.ready()){
linhasCopiadas.add(destino.readLine());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class Teste6 {
public static void main(String[] args) {
try {
Teste6 programa = new Teste6();
programa.executar();
} catch (Throwable t) {
t.printStackTrace();
}
}
private List<String> linhasCopiadas;
private void executar() throws IOException {
String[] diretorios = new String[] {"://", "C://", "D://", "F://");
for(String dir : diretorios) {
File arquivoDestino = new File("Diretorio", \\new.txt);
PrintWriter destino = new PrintWriter(arquivoDestino);
linhasCopiadas = new ArrayList<>();
for (File arquivo : diretorio.listFiles()) {
BufferedReader origem = new BufferedReader(new FileReader(arquivo));
copiar(origem, destino);
destino.println();
origem.close();
}
destino.flush();
destino.close();
}
private void copiar(BufferedReader origem, PrintWriter destino) throws IOException {
String linha = null;
while ((linha = origem.readLine()) != null) {
if (!linhasCopiadas.contains(linha)) { // se a linha ainda não foi copiada pro arquivo de destino
destino.println(linha); // copia a linha no arquivo de destino
linhasCopiadas.add(linha); // joga a linha na lista de linhas copiadas
}
}
destino.println(); // pular linha no arquivo de destino
}
}
}
Bom dia, como ficaria esse código com uma busca por aquivos com o mesmo nome, e a comparação dentro desses arquivos sendo feita apenas com a chave das linhas contidas nesses arquivos, como nesse exemplo que eu respondi por ultimo.
Exemplo de informações que estão no arquivo
chave = valor
desenvolvi esse código, mas não esta lendo as informações que já estão no aquivo de destino e esta apagando e parece que esta esta copiando para o arquivo de destino apenas as linha que são diferentes entre todos arquivos
package Ler;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Unificar {
public static void main(String[] args) throws IOException {
ProcurarArquivos e = new ProcurarArquivos();
// Aruivos a serem procurados
List<String> extensions = Arrays.asList(new String[] { "ApplicationResources.properties" });
Unificar prog = new Unificar();
// Caminho onde vai ser procurar
List<File> files = e.listFiles(new File("c:\\"), extensions);
for (File f : files) {
BufferedReader arquivoFile = new BufferedReader(new FileReader(f));
prog.modifica(arquivoFile);
// System.out.println(f.getAbsolutePath());
}
try {
Unificar programa = new Unificar();
programa.executar();
} catch (Throwable t) {
t.printStackTrace();
}
}
public List<File> listFiles(File directory) {
List<File> files = new ArrayList<File>();
listFiles(files, directory);
return files;
}
private void listFiles(List<File> files, File directory) {
File[] filesAndSubdirectories = directory.listFiles();
if (filesAndSubdirectories != null) {
for (File file : filesAndSubdirectories) {
if (file.isDirectory()) {
listFiles(files, file);
} else {
files.add(file);
}
}
}
}
private List<String> linhasCopiadas;
private void executar() throws IOException {
}
// Função que compara as linhas para não se repetir
private void copiar(BufferedReader origem, PrintWriter destino)
throws IOException {
String linha = null;
String[] chaveValor;
while ((linha = origem.readLine()) != null) {
chaveValor = linha.split("=");
// System.out.println(chaveValor[0]);
// System.out.println(chaveValor[1]);
if (!linhasCopiadas.contains(chaveValor[0])) { // Se a linha ainda não foi copiada pro arquivo de destino
destino.println(linha); // Copia a linha no arquivo de destino
linhasCopiadas.add(chaveValor[0]); // Joga a linha na lista de linhas copiadas
}
}
}
private void ler(BufferedReader arquivoDestino) {
try {
while (arquivoDestino.ready()) {
linhasCopiadas.add(arquivoDestino.readLine());
}
} catch (IOException e) {
e.printStackTrace();
}
}
private boolean endsWith(File filename, List<String> extensions) {
String name = filename.getName();
for (String ext : extensions) {
if (name.toLowerCase().endsWith(ext.toLowerCase()))
return true;
}
return false;
}
public List<File> listFiles(File directory, List<String> extensions) {
List<File> files = new ArrayList<File>();
listFiles(files, directory, extensions);
return files;
}
private void listFiles(List<File> files, File directory,
List<String> extensions) {
File[] filesAndSubdirectories = directory.listFiles();
if (filesAndSubdirectories != null) {
for (File file : filesAndSubdirectories) {
if (file.isDirectory()) {
listFiles(files, file, extensions);
} else {
if (endsWith(file, extensions)) {
files.add(file);
}
}
}
}
}
public void modifica(BufferedReader origem) throws IOException {
File arquivoDestino = new File("C:\\Users\\p808176\\Desktop\\Teste.txt");
PrintWriter destino = new PrintWriter(arquivoDestino);
// PrintWriter arquivo = new PrintWriter(diretorio);
linhasCopiadas = new ArrayList<>();
BufferedReader ler = new BufferedReader(new FileReader(arquivoDestino));
// BufferedReader origem = new BufferedReader(new
// FileReader(diretorio));
// Lendo o arquivo de
ler(ler);
String linha = null;
String[] chaveValor;
while ((linha = ler.readLine()) != null) {
chaveValor = linha.split("=");
if (!linhasCopiadas.contains(chaveValor[0])) { // Se a linha ainda não foi copiada pro arquivo de destino
destino.println(linha); // Copia a linha no arquivo de destino
linhasCopiadas.add(chaveValor[0]); // Joga a linha na lista de linhas copiadas
}
}
copiar(origem, destino);
origem.close();
destino.flush();
destino.close();
}
}
Desenvolvi um pouco mais o código mas agora ele esta copiando linhas iguais. e tenho que compara primeiro o valor antes do “=” e se for diferente acrescenta ao arquivo se for igual faz a comparação com o valor depois do “=” se for igual não acrescenta se for diferente acrescenta no arquivo adicionado mais um comentário na linha para identificação depois do arquivo pronto.
package Unificar;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* @author p808176
*
*/
public class Unificar {
public static void main(String[] args) throws IOException {
ProcurarArquivos e = new ProcurarArquivos();
// Nome dos arquivos a serem procurados
List<String> extensions = Arrays.asList(new String[] { "ApplicationResources.properties" });
Unificar prog = new Unificar();
// Caminho onde vai ser procurar
List<File> files = e.listFiles(new File("C:\\powerlogic\\workspaces\\workspace_producao"), extensions);
for (File f : files) {
if(!f.getAbsoluteFile().toString().contains("classes")){
BufferedReader arquivoFile = new BufferedReader(new FileReader(f));
prog.modifica(arquivoFile);
// Ira printar os caminhos dos arquivos encontrados
System.out.println(f.getAbsolutePath());
}
}
System.out.println("Arquivo de unificação feito com sucesso");
try {
Unificar programa = new Unificar();
programa.executar();
} catch (Throwable t) {
t.printStackTrace();
}
}
private List<String> linhasCopiadas;
void executar() throws IOException {
}
private void ler(BufferedReader arquivoDestino) {
try {
String linha = "";
while ((linha = arquivoDestino.readLine()) != null) {
linhasCopiadas.add(linha);
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void modifica(BufferedReader files) throws IOException {
File arquivoDestino = new File("C:\\Users\\p808176\\Desktop\\Teste.txt");
Writer destino = new BufferedWriter(new FileWriter(arquivoDestino, true));
linhasCopiadas = new ArrayList<>();
BufferedReader ler = new BufferedReader(new FileReader(arquivoDestino));
// Lendo o arquivo de Destino e acrescentar apenas valores diferentes
ler(ler);
String linha = null;
String[] chaveValor;
String newLine = System.getProperty("line.separator");
while ((linha = files.readLine()) != null) {
chaveValor = linha.split("=");
if (linhasCopiadas.contains(chaveValor[0])) { // Se a linha ainda não foi copiada pro arquivo de destino
destino.write(newLine+linha); // Copia a linha no arquivo de destino
linhasCopiadas.add(chaveValor[0]); // Joga a linha na lista de linhas copiadas
}
}
files.close();
destino.flush();
destino.close();
}
}
package Unificar;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class ProcurarArquivos {
public List<File> listFiles(File directory) {
List<File> files = new ArrayList<File>();
listFiles(files, directory);
return files;
}
private void listFiles(List<File> files, File directory) {
File[] filesAndSubdirectories = directory.listFiles();
if (filesAndSubdirectories != null) {
for (File file : filesAndSubdirectories) {
if (file.isDirectory()) {
listFiles(files, file);
} else {
files.add(file);
}
}
}
}
private boolean endsWith(File filename, List<String> extensions) {
String name = filename.getName();
for (String ext : extensions) {
if (name.toLowerCase().endsWith(ext.toLowerCase()))
return true;
}
return false;
}
public List<File> listFiles(File directory, List<String> extensions) {
List<File> files = new ArrayList<File>();
listFiles(files, directory, extensions);
return files;
}
private void listFiles(List<File> files, File directory, List<String> extensions) {
File[] filesAndSubdirectories = directory.listFiles();
if (filesAndSubdirectories != null) {
for (File file : filesAndSubdirectories) {
if (file.isDirectory()) {
listFiles(files, file, extensions);
} else {
if (endsWith(file, extensions)) {
files.add(file);
}
}
}
}
}
}