Leitura de Arquivos em SOs diferentes

4 respostas
R

Pessoal, sei que a norma é buscar aqui no fórum tópico semelhante, e achei vários porém não consegui resolver o meu problema.

Acontece o seguinte: Tenho um sistema que simula um Escalonador, e ele recebe e manipula arquivos. No projeto há uma pasta chamada “processos” que contém os processos que serão escalonados.

Executando o sistema pelo terminal, no Windows ele consegue achar o caminho das pastas e manipular os arquivos.

O problema acontece no Linux, que lança uma exceção por não encontrar o caminho do arquivo.

Estou referenciando a raíz do meu projeto através disso: File file = new File("/"); No win ele entende que isso é a raíz do meu projeto, porém no linux ele procura o arquivo de dentro da pasta bin, por isso não acha a pasta.

Alguem teria alguma ideia de como resolver?

4 Respostas

drsmachado

Até onde lembro

File f = new File(".");

É o que faz a raiz ser o diretório onde o jar está rodando.

R

O “.” no linux me direcionado para a pasta “bin” do projeto.
No caso, a pasta “processos” está dentro da pasta raiz do projeto ou seja : “NomeProjeto\processos”.

Acontece que ao executar no terminal do linux o comando “java -cp . NomeDaClasse” de dentro da “bin” do projeto, talvez ele acha que a minha pasta raiz é a “bin” e não encontra a pasta correta.

E

Eu resolvia esse tipo de problemas em meus programas indicando, via variável qual era o diretório que deveria ser considerado como base dos arquivos a serem usados.
Então, para todos os arquivos, sempre usava algo como

File f = new File (new File (System.getProperty ("diretorio.base")), "meuArquivo.txt"); em vez de ficar supondo que o diretório corrente está magicamente onde eu quero.
Afinal de contas, o Java nesse ponto é meio chatinho e não gosto de desafiar a natureza.
Se tem uma pedra gigante no meio da estrada, você vai esperar alguém dinamitá-la ou vai dar a volta ? Eu infelizmente prefiro dar a volta.

Um exemplo:

java -cp _____ -Ddiretorio.base=/home/entanglement/projeto br.com.exemplo.MeuPrograma

E obviamente nunca chamava o programa diretamente via linha de comando, mas sim via script ou batch.

R

Essa ideia é ate legal mas não funciona no meu caso. Não sou eu quem vai executar o programa e o teste terá que ser feito por linha de comando.

Tinha tentado pegar uma variável do sistema “System.getProperty(“user.dir”)” mas funcionava somente no eclipse. Ao imprimir o caminho pelo eclipse ele me dava “NomeDoProjeto\pasta” correto, porém via terminal, como os meus .class estavam na pasta bin, e fazia o comando de execução dentro dessa pasta, ele tentava achar assim: “NomeDoProjeto\bin\pasta” e acontecia a exceção.

Pra resolver isso criei um projeto com os ponto .class e .java na mesma pasta. Como executo o camando “java -cp . ClasseMain” na pasta raíz do projeto ele acha a subpasta que gostaria.

Acho essa solução ruim, e não gostaria de fazer assim, mas funcionou :slight_smile:

Criado 12 de setembro de 2012
Ultima resposta 12 de set. de 2012
Respostas 4
Participantes 3