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:
Pode ser que ele esteja procurando “bloqueados.xls” em outro diretório.
P
petter
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
thingol
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.
importjava.net.*;importjava.io.*;classTestePathDaClasse{publicTestePathDaClasse(){}/** 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. */publicStringpathDaClasse(Classklass)throwsException{StringclassName="/"+klass.getName().replace('.','/')+".class";URLu=klass.getResource(className);Strings=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"intpos=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:/ProgramFiles/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())); }}