Galera, estou precisando de ajuda…
tenho que tratar um arquivo grande de 114545 linhas. mas não estou conseguindo, da um Exception aqui que não tô sabendo o que é!!
java.io.FileNotFoundException: arquivoParticionado_01 (Too many open files)
at java.io.FileOutputStream.openAppend(Native Method)
at java.io.FileOutputStream.(FileOutputStream.java:177)
at java.io.FileWriter.(FileWriter.java:90)
at util.ManipulaArquivo.gravaArquivo(ManipulaArquivo.java:50)
at tratamento.Tratador.particionaArquivo(Tratador.java:85)
at tratamento.Tratador.main(Tratador.java:26)
Exception in thread “main” java.lang.UnsatisfiedLinkError: /usr/lib/jvm/java-6-sun-1.6.0.13/jre/lib/i386/libawt.so: /usr/lib/jvm/java-6-sun-1.6.0.13/jre/lib/i386/libawt.so: cannot open shared object file: Too many open files
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1778)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1695)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1030)
at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:50)
at java.security.AccessController.doPrivileged(Native Method)
at sun.awt.NativeLibLoader.loadLibraries(NativeLibLoader.java:38)
at sun.awt.DebugHelper.(DebugHelper.java:29)
at java.awt.Component.(Component.java:560)
at util.ManipulaArquivo.gravaArquivo(ManipulaArquivo.java:57)
at tratamento.Tratador.particionaArquivo(Tratador.java:85)
at tratamento.Tratador.main(Tratador.java:26)
não é erro de código, pq para um arquivo pequeno funciona, mas qdo chega na linha 1015 ele dá pau!!!
tem algo em java q limita a quantidade de acessos ao arquivo, o que pode ser isso?
Se puderem me dar uma luz em como resolver meu problema…
Você está abrindo o arquivo sem fechá-lo depois? Se for isso, você está fazendo besteira. Sempre que você lê ou escreve algo em um arquivo, e não vai mais usá-lo, tem de fechá-lo explicitamente com close. O Garbage Collector pode até fechar alguns arquivos que ficaram abertos durante muito tempo e ficaram sem uso, mas você não pode confiar nisso. É como confiar na Prefeitura para tirar aquela montanha de entulho que ficou depositada na calçada da frente da sua casa, só porque você não quer usar sacos de lixo e o serviço de coleta normal não leva lixo que não esteja embrulhado corretamente. De vez em quando a Prefeitura até passa aí, mas enquanto isso você vai ficar é com um problema de saúde pública.
E o sistema operacional que você está usando (Linux? Solaris? AIX?) tem um limite para o número de arquivos abertos simultaneamente.
galera os arquivos são abertos e fechados, será que o problema é que eu abro e fecho o arquivo várias vezes?? será que se eu abrir e deixar aberto, fechar só no fim do tratamento do arquivo, será que isso não seria possível? Pq o que meu código faz é ler linha a linha do arquivo de 114545 linhas. Ele trata linha por linha e vai gravando essas linhas tratadas em outro arquivo.
Do jeito que está aqui eu abro o arquivo leio a linha N, armazeno em uma String, fecho o arquivo, trato a String e a gravo em outro arquivo, isso é feito 114545 vezes!
Nossa Senhora, abrir um arquivo é uma operação relativamente lenta. O seu arquivo de entrada você pode abrir só uma vez e deixar aberto até que o processamento seja encerrado.
Mas é isso, já fiz o teste e não mudou nada, deixei o arquivo aberto, fechei so no fim, continua dando a mesma Exception… não sei o que faço com essa p*** mais não!
valeu galera… encontrei o problema. Passei ontem uma boa parte do dia procurando o erro, nada como passar um período longe do código, dormindo, e acordar hj cedo olha para o código e achar o erro