Arquivos com +2Gb

8 respostas
A
E  pessoal, tudo bem !!!

Estou tentando abrir uma arquivo, texto puro, que tem +ou- uns 2Gb e meio E esse é o menor

O programa não da erro e também não faz nada e não abre o arquivo!

Fiz o programa usando:



FileReader arq = new FileReader( //diretorio1//usr//arqorig//DADOS.txt );

BufferedReader leitor = new BufferedReader(arq);


Alguém tem alguma idéia ou sugestão? O java esta preparado para trabalhar com arquivos grandes ? Tem algum limite ?

[]s,
Alex.

8 Respostas

T

Você está rodando esse programa no Windows, Linux, …?

Onde está esse arquivo (no HD da própria máquina, em um share de rede, …?)

Qual é o filesystem onde está esse tal arquivo (ext2, ext3, NTFS, FAT32 …)?

Estou achando estranho porque “//” não é nem Windows nem Linux; no Windows usa-se “\” (também pode usar “/”, mas não para um share de rede, onde você tem de usar algo como “\\servidor\share\diretorio\arquivo.txt”) e no Linux, “/”. Qual o sistema operacional?

T

E a propósito, diferentemente de um programa C, o Java sempre considera que você quer abrir os arquivos com as APIs que permitem abrir arquivos grandes. Programas C rodando em Linux ou Windows, por exemplo, podem ter problemas ao abrir um arquivo grande porque não usam as APIs adequadas para abrir arquivos grandes. Mas o Java sempre usa as APIs para abrir arquivos grandes.

A

Em tempo este arquivo está em um filesystem do UNIX rodando SunOS v5.10 Não sei que tipo de hardware é (64bits ou SPARC, RISC SEI LA…).
Independente, se o Java sempre utiliza as APIs corretas e ai? Pq não tem nenhuma exception ?
Em C geralmente eu utilizo a fopen64… E funciona.
Nesse meu processo linguagem C não cabe a ser utilizada…

[]s,
Alex.

A

Outra coisa, eu utilizo um arquivo .jar e executo como “java -jar pacote.jar”.

[]s,
Alex.

T

SunOS v5.10 é Solaris 10; Solaris é Unix, e a notação do Unix para arquivos é usar “/” para separar as partes, não “//”. Você está usando um filesystem montado via NFS ou então está rodando o programa no Solaris diretamente?

Eu sei que se você quer acessar um “share” no Solaris pode usar a notação “/net”, por exemplo “/net/122.44.55.66/usr/teste” ou coisa parecida. Não sabia que era possível usar uma “//”.

A

O sistema operaciona é o Solaris sim e rodo a aplicação diretamente na linha de comando para não perder tempo.
Entaum eu tbm não sabia, antes de utilizar “//” estava utilizando diretamente “/” daí dava pau,
Bom daí fiquei sabendo que o correto era “//”.
Veja bem esse aplicativo que estou trabalhando ja funcionava com “//” abrindo arquivos de menos 1Gb, tipo 700 a 800Mb!!!
Bom o negócio foi evoluindo e agora tenho arquivos de até 10Gb para abrir e trabalhar…
Vc comentou da notação “/net”, não querendo abusar vc tem alguma documentação disso que poderia me passar um link ou coisa parecida, acho que tenho que estudar mais esse tipo de acesso…
[]s,
Alex.

T

Hum… eu sei que tenho de achar na documentação do Solaris, mas a notação “/net” está mais ou menos explicada aqui:

T

Se o protocolo usado para acessar o tal share NFS for v2, então arquivos grandes não podem ser lidos adequadamente. Mas aí um programa em C usando fopen64 também teria problemas com esse arquivo grande.

Acho que o NFS usado pelo Solaris é v4, mas não tenho certeza.

http://lists.freebsd.org/pipermail/freebsd-questions/2004-June/048287.html
http://www.sun.com/third-party/global/sas/collateral/wp/largefile.jsp
http://www.uic.rsu.ru/doc/unix/administration/Solaris_System_Administration_Guide-stripped/ch04/124-127.html

De qualquer maneira, dê uma perguntadinha para seu administrador de rede. Talvez ele saiba melhor sobre como foi shareado o tal share NFS.

Criado 7 de maio de 2009
Ultima resposta 7 de mai. de 2009
Respostas 8
Participantes 2