Olá,
Por favor, se alguém conseguir me ajudar… tenho uma pasta com ‘N’ arquivos .txt e preciso converter o conteúdo de todos eles para maiúsculo, mas ele grava o arquivo vazio, teria como alguém me ajudar? não estou conseguindo encontrar o erro.
String diretorio = “C:\Users\Administrador\Downloads\HC”;
File file = new File(diretorio);
File afile[] = file.listFiles();
int i = 0;
for (int j = afile.length; i < j; i++) {
BufferedReader in = null;
try {
BufferedReader buffer = null;
File arquivos = afile[i];
in = new BufferedReader(new InputStreamReader(new FileInputStream(afile[i]), "UTF8"));
String str;
FileWriter arq = new FileWriter(afile[i]);
PrintWriter gravarArq = new PrintWriter(arq);
while ((str = in.readLine()) != null) {
gravarArq.printf(str.toLowerCase());
}
arq.close();
in.close();
vc nao pode escrever E ler no mesmo arquivo.
vc tem duas opções:
-
vc le do arquivo origem, escreve em um arquivo temporario e depois renomeia/move esse arquivo temporario para o arquivo de origem
-
vc le o conteudo do arquivo de origem em memoria, faz a transformação que vc quer em memoria e depois vc escreve no arquivo de origem.
as duas opções tem vantagens e desvantagens. se os arquivos forem grandes vc vai usar muita memoria. criar arquivos temporarios não é uma atividade trivial
boa sorte
mas é essa 2ª opção que eu estou fazendo amigo, a questão é que está com algum erro no meu código que esta escrevendo tudo em branco e eu não estou encontrando, quando eu vejo o valor da variável ela está com texto.
cara vc não esta fazendo isso.
vc esta lendo de um BufferedReader e esta escrevendo no PrintWriter LINHA POR LINHA
inclusive vc vai ter uma surpresa: vc vai perder os caracteres newline desse jeito.
se vc realmente quer escrever em memoria, escreva em um stringbuffer primeiro, depois escreva de volta no arquivo.
1 curtida
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.util.List;
public class Exemplo {
public static void main(String[] args) {
File diretorio = new File("C:\\Users\\Administrador\\Downloads\\HC");
Exemplo programa = new Exemplo();
programa.verificarDiretorio(diretorio);
}
private final FileFilter pastasEarquivosTxt = new FileFilter() {
@Override
public boolean accept(File file) {
if (file.isDirectory()) {
return true;
}
return file.getName().toLowerCase().endsWith(".txt");
}
};
private void verificarDiretorio(File diretorio) {
for (File file : diretorio.listFiles(pastasEarquivosTxt)) {
if (file.isDirectory()) {
verificarDiretorio(file);
} else {
converterArquivoPraMaiusculo(file);
}
}
}
private void converterArquivoPraMaiusculo(File arquivo) {
try {
List<String> linhas = Files.readAllLines(arquivo.toPath());
PrintWriter saida = new PrintWriter(arquivo);
for (String linha : linhas) {
saida.println(linha.toUpperCase());
}
saida.flush();
saida.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
1 curtida
Funcionou perfeitamente, muito obrigado, você tem algum lugar onde pesquisou e estudou para montar este exemplo? queria aprender como fazer xD
Vc pode consultar a documentação das classes para entender como elas funcionam.
Para entender como desenhar uma aplicação pensando em memória, i/o, cpu existem varias disciplinas separadas que vc precisa estudar, como estruturas de dados, algoritmos, sistemas operacionais, etc.
Mesmo q java rode sob uma máquina virtual o conceito de arquivo é algo q vem de sistemas operacionais.
Pratique bastante
1 curtida