Estou com o seguinte problema. Tenho um código que faz a leitura de um arquivo de texto. Esse código está funcionando corretamente. Mas eu tenho um problema. A cada hora eu recebo via ftp um arquivo novo com um nome diferente. Nesse meu código eu coloco o nome do arquivo que eu quero ler. Não daria certo eu colocar para o usuário inserir o nome do arquivo pq esse código será rodado pelo tarefas agendadas do windows através de um bat que executa o jar criado. Qual seria a melhor solução para esse problema??
Leitura de arquivo com nome diferente
6 Respostas
Esses arquivos ficam no mesmo diretório, certo?
Vc poderia verificar a última data da modificação dos arquivos, que tal??
O problema é que vai ser um novo arquivo e não um arquivo antigo alterado.
Cara … eu acredito que você possa usar algo parecido com isto aqui…
http://www.guj.com.br/posts/list/64002.java para descobrir o nome do arquivo (Exemplo teste.TXT) que você deverá ler… e depois de ler o arquivo sugiro que você renomeie a extensão (teste.OLD)
class ExemploDir {
/**
* @param startingDirectory O diretório inicial.
* @param pattern Uma expressão regular que deve ser aplicada
* ao nome do arquivo.
*/
public List<File> findFiles (final File startingDirectory, final String pattern) {
List<File> files = new ArrayList<File>();
if (startingDirectory.isDirectory()) {
File[] sub = startingDirectory.listFiles(new FileFilter() {
public boolean accept (File pathname) {
return pathname.isDirectory() || pathname.getName().matches (pattern);
}
});
for (File fileDir: sub) {
if (fileDir.isDirectory()) {
files.addAll (findFiles (fileDir, pattern));
} else {
files.add (fileDir); //
}
}
}
return files;
}
/**
*
*/
chamada:
ExemploDir ed = new ExemploDir();
ed.findFiles (new File("."), ".*\\.txt");
Entaum mas a última data do arquivo seria a data de criação. 
O código ficaria mais ou menos assim…File file = new File("DIRECTORY");
File[] files = file.listFiles();
List list = new ArrayList();
for(int i = 0; i < files.length; i++){
list.add(new Long(files[i].lastModified()));
}
Collections.sort(list);
System.out.println(list.get(files.length - 1));Deve ter alguma solução melhor usando o TreeSet talvez…
Obs: Muitas das suas paixões são as mesmas das minhas… rs
Estava com uma idéia de criar um método que faz mais ou menos isso que vc falou. Ler todos os arquivos de uma pasta armazenar em um array e depois ir lendo um por um e armazenando no banco. Mas esse que vc me passou agora parece bem melhor. Vou testar ele e depois falo o resultado.
Consegui resolver meu problema assim:
/**
* @(#)teste.java
*
*
* @author
* @version 1.00 2007/7/30
*/
import java.io.*;
import java.util.*;
public class teste {
/**
* Creates a new instance of <code>teste</code>.
*/
int cont;
int nivel=0;
public void teste() {
String dir = "C://Documents and Settings//Administrador//Desktop//JAVA DRMO";
java.io.File diretorio = new java.io.File(dir);
String[] arquivos = diretorio.list();
for (int i= 0; i < arquivos.length; i++){
if(arquivos[i].endsWith("java")){
System.out.println(arquivos[i]);}
nivel=nivel+1;
}
System.out.println("Tenho "+nivel +" arquivos");
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
teste t = new teste();
t.teste();
}
}
Estou lendo a pasta e pegando os nomes de arquivos pela extensão.
Valeu pela ajuda!!!