App Java não localiza arquivo no Linux

4 respostas
P

Pessoal tenho um app Java que abre um arquivo .xls para leitura. No Windows funciona tranquilamente, porém no Linux acusa que o arquivo não foi encontrado.
Abro o arquivo da seguinte forma:

Workbook workbook = Workbook.getWorkbook(new File("bloqueados.xls"));

Alguém tem alguma dica?

P.S.: já confirmei e o arquivo existe com esse mesmo nome.

4 Respostas

leonardom

Ele não encontra o arquivo mesmo? Esse é o erro? Não seria permissão não?

T

Dica: verifique no seu aplicativo qual é o diretório corrente.

Antes de chamar essa linha, use:

System.out.println (new File (".").getAbsolutePath());

Pode ser que ele esteja procurando “bloqueados.xls” em outro diretório.

P

Thingol vc matou a pau. :lol:

Ele está não sei o porque direcionando para a pasta Home do usuário.

Tem como fazer ele buscar na pasta corrente (onde está o .jar) sem ter que colocar todo o caminho no meu app? Pois preciso da portabilidade entre Windows e Linux.

T

Você pode localizar seu .jar (ou seja, tentar ver onde é que está uma das classes do seu jar), e daí pegar o diretório. É meio nojento e não sei se funciona no Linux direito.

O que acho melhor: NÃO CHAME SEU PROGRAMA CLICANDO DUAS VEZES NO JAR. Isso é pedir para criar confusão. Crie um script (.cmd no Windows, arquivo script no Linux) que chama seu .jar no diretório correto e com os parâmetros certos. Aí você não precisa usar o código abaixo, que é muito complicado e nunca testei no Linux.

Eu postei esta classe neste fórum faz algum tempo, leia-a e veja o que voc~e pode aproveitar dela.

import java.net.*;
import java.io.*;

class TestePathDaClasse {
    
    public TestePathDaClasse() {
    }
    /** Retorna uma string indicando em que .jar a classe pôde ser encontrada,
     * ou então o diretório a partir do qual a classe foi encontrada.
     * Por exemplo, para java.lang.String, deve retornar algo como 
     * "C:/Program Files/Java/jre1.5.0_08/lib/rt.jar"
     * e para esta classe, o diretório onde está a classe.
     */
    public String pathDaClasse (Class klass) throws Exception {
        String className = "/" + klass.getName().replace ('.', '/') + ".class";
        URL u = klass.getResource (className);
        String s = u.toString();
        if (s.startsWith ("jar:file:/")) {
            // Deve ser algo como "jar:file:/C:/Program%20Files/Java/jre1.5.0_08/jre/lib/rt.jar!/java/lang/String.class"
            int pos = s.indexOf (".jar!/");
            if (pos != -1) {
                if (File.separator.equals ("\"))
                    s = s.substring ("jar:file:/".length(), pos + ".jar".length());
                else 
                    s = s.substring ("jar:file:".length(), pos + ".jar".length());
                s = s.replaceAll ("%20", " ");
            } else {
                s = "?";
            }
        } else if (s.startsWith ("file:/")) {
            // Algo como "file:/C:/temp2/java/TestePathDaClasse.class"
            if (File.separator.equals ("\"))
                s = s.substring ("file:/".length());
            else
                s = s.substring ("file:".length());
            s = s.substring (0, s.lastIndexOf (className)).replaceAll ("%20", " ");
        } else {
            s = "?";
        }
        return s;
    }

    public static void main(String[] args) throws Exception {
        TestePathDaClasse t = new TestePathDaClasse();
        // Deve mostrar algo como "C:/Program Files/Java/jre1.5.0_08/lib/rt.jar"
        System.out.println (t.pathDaClasse (Class.forName ("java.lang.String")));
        // Deve mostrar algo como "C:/diretoriodaclasse"
        System.out.println (t.pathDaClasse (t.getClass()));
    }
}
Criado 8 de setembro de 2006
Ultima resposta 8 de set. de 2006
Respostas 4
Participantes 3