Olá, estou tentando encontrar um arquivo .jasper no meu sistema web e está dando erros. O sistema não encontra.
Utilizei: String path = this.getServlet().getServletConfig().getServletContext().getRealPath("");
Depois concateno isso daí com o resto do endereço.
Está errado o endereço, pois depois do jboss\server\default.\web O “.” não deveria existir!!! Não sei porque tá ali, mas não tá funcionando pois não encontra o arquivo, graças ao maldito ponto! Sugestões?
Use os métodos da classe File para fazer a concatenação.
importjava.io.*;classTiraPontos{publicstaticvoidmain(String[]args)throwsIOException{Strings="C:\temp\.";Filef=newFile(s);Fileg=newFile(f,"teste.txt");// isto faz a concatenação...System.out.println(g.getCanonicalPath());// se o diretório existir, irá mostrar 'c:\temp\teste.txt'}}
andrestrindade
O problema é que não quero um diretório fixo, quero o diretório da aplicação. O getRealPath seria o ideal pra mim, mas não sei porque o danado insiste em botar um PONTO ali… E isso é antes de concatenar, o problema não é a concatenação.
Obrigado!
andrestrindade
entanglement:
Use os métodos da classe File para fazer a concatenação.
importjava.io.*;classTiraPontos{publicstaticvoidmain(String[]args)throwsIOException{Strings="C:\temp\.";Filef=newFile(s);Fileg=newFile(f,"teste.txt");// isto faz a concatenação...System.out.println(g.getCanonicalPath());// se o diretório existir, irá mostrar 'c:\temp\teste.txt'}}
Do jeito que estou fazendo fica assim:
C:\Jboss\jboss-4.2.3.GA\server\default\.\tmp\deploy\aplicacao-exp.warweb\WEB-INF\reports\relatorio.jasper
O correto seria:
C:\Jboss\jboss-4.2.3.GA\server\default\tmp\deploy\aplicacao-exp.warweb\WEB-INF\reports\relatorio.jasper
Não consigo explicar com a razão, com meus conhecimentos, porque raios o ponto está ali. hehe
Grato
Priuli
Kara, eu costumo adicionar os relatorios em um pacote ou pasta chamada resources dentro da minha aplicação e obtenho o caminho do arquivo dinamicamente atraves do ClassLoader…
vc pode colocar em qualquer pasta dentro do seu jar ou war e obter atraves deste comando…
Este comando funciona tanto no linux quanto no windows… pois to utilizando o File.separator.
Abrçs
andrestrindade
Priuli:
Kara, eu costumo adicionar os relatorios em um pacote ou pasta chamada resources dentro da minha aplicação e obtenho o caminho do arquivo dinamicamente atraves do ClassLoader…
vc pode colocar em qualquer pasta dentro do seu jar ou war e obter atraves deste comando…
Este comando funciona tanto no linux quanto no windows… pois to utilizando o File.separator.
Abrçs
Não funcionou :l
gomesrod
Você tem que usar a primeira solução postada:
entanglement:
importjava.io.*;classTiraPontos{publicstaticvoidmain(String[]args)throwsIOException{Strings="C:\temp\.";Filef=newFile(s);Fileg=newFile(f,"teste.txt");// isto faz a concatenação...System.out.println(g.getCanonicalPath());// se o diretório existir, irá mostrar 'c:\temp\teste.txt'}}
Mas evidentemente trocando o C:\\Temp pelo caminho obtido do getRealPath
Está fixo apenas para simplificar o exemplo! O principal está aqui:
File f = new File(diretorio, nomeDoArquivo)
Essa linha é que junta o diretorio com nome do arquivo, criando um objeto File correspondente ao caminho completo.
andrestrindade
gomesrod:
Você tem que usar a primeira solução postada:
entanglement:
importjava.io.*;classTiraPontos{publicstaticvoidmain(String[]args)throwsIOException{Strings="C:\temp\.";Filef=newFile(s);Fileg=newFile(f,"teste.txt");// isto faz a concatenação...System.out.println(g.getCanonicalPath());// se o diretório existir, irá mostrar 'c:\temp\teste.txt'}}
Mas evidentemente trocando o C:\\Temp pelo caminho obtido do getRealPath
Está fixo apenas para simplificar o exemplo! O principal está aqui:
File f = new File(diretorio, nomeDoArquivo)
Essa linha é que junta o diretorio com nome do arquivo, criando um objeto File correspondente ao caminho completo.
Vou testar e posto a resposta. Obrigado Sr. Sirigueijo :>
Priuli
Me enganei eu uso este comando para obter os meus subrelatorios que passo como parametro dinamico, mais com este comando é possivel sim obter o caminho dos arquivos jasper. Este comando como disse é dinamico e funciona perfeitamente eu utilizo no sistema onde trabalho, tanto em linux como windows segue o codigo que utilizo:
packagebr.com.myapp;publicclass...{@SuppressWarnings("unchecked")publicFilegerarRelatorioDocumento(Filtrofiltro,HashMap<String,Object>parameters)throwsCoreException{StringrelatorioPath="relatorios/meuRelatorio.jasper";// os arquivos .jasper estão no pacote br.com.myapp.relatorios e está classe está uma pasta antes da pasta de relatorioparameters.put("veiculoList",newJRBeanCollectionDataSource((List)parameters.get("veiculoList")));Stringpath=this.getJasperPath();parameters.put("SUBREPORT_DIR",path);parameters.put("SUBREPORT_DIR_IMG",path);returnprepareReportXLS(filtro,(ResultSet)parameters.get("rs"),relatorioPath);}privateFileprepareReportXLS(FiltroHashMapfiltro,ResultSetrs,StringrelatorioPath)throwsCoreException{Filefile=null;try{JRResultSetDataSourceds=newJRResultSetDataSource(rs);//Recupera o arquivo jasper, verificando sua existenciaInputStreamreportStream=this.getClass().getResourceAsStream(relatorioPath);//Objetos necessarios para o JasperReportJRXlsExporterexportaXLS=newJRXlsExporter();file=File.createTempFile("temp","relatorioLocalJur");//Gera reportJasperPrintjasperPrint=JasperFillManager.fillReport(reportStream,filtro.getMap(),ds);exportaXLS.setParameter(JRExporterParameter.CHARACTER_ENCODING,"UTF-8");exportaXLS.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);exportaXLS.setParameter(JRExporterParameter.OUTPUT_FILE,file);exportaXLS.setParameter(JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,Boolean.FALSE);exportaXLS.exportReport();}catch(Exceptione){thrownewMyException("Ocorreu um erro ao gerar o relatório. Erro="+e.getMessage(),e);}returnfile;}}