Tenho um projeto com 2 pacotes:
tkorg.idrs.core.searchengines
tkorg.idrs.core.searchengines
No pacote (2) eu tenho um arquivo de texto ListStopWords.txt
, no pacote (1) eu tenho uma aula FileLoadder
. Aqui está o código em FileLoader
:
File file = new File("properties\\files\\ListStopWords.txt");
Mas tem este erro:
The system cannot find the path specified
Você pode dar uma solução para consertar isso? Obrigado.
properties.files
para2
?Respostas:
Se já estiver no caminho de classe, basta obtê-lo do caminho de classe em vez do sistema de arquivos do disco. Não mexa com caminhos relativos em
java.io.File
. Eles dependem do diretório de trabalho atual sobre o qual você não tem nenhum controle de dentro do código Java.Supondo que
ListStopWords.txt
esteja no mesmo pacote de suaFileLoader
classe, faça:Ou se tudo o que você está procurando é na verdade um
InputStream
deles:Isso certamente é preferido em vez de criar um
new File()
porqueurl
pode não representar necessariamente um caminho do sistema de arquivos do disco, mas também pode representar o caminho do sistema de arquivos virtual (o que pode acontecer quando o JAR é expandido na memória em vez de em uma pasta temporária no sistema de arquivos do disco) ou mesmo um caminho de rede que não é digerido por definição peloFile
construtor.Se o arquivo for - como o nome do pacote sugere - é na verdade um arquivo de propriedades completo (contendo
key=value
linhas) com apenas a extensão "errada", então você pode alimentarInputStream
imediatamente oload()
método.Nota: quando você está tentando acessá-lo de dentro do
static
contexto, useFileLoader.class
(ou qualquer outra coisaYourClass.class
) em vez dosgetClass()
exemplos acima.fonte
FileLoader
é a classe personalizada do OP. Deve ser exatamente aquela classe em que você está tentando obter o recurso. Assim, entãoNameOfYourCurrentClass.class.getResourceAsStream(...)
. OClassLoader.class
falhará se aClassLoader
classe estiver sendo carregada por um carregador de classe diferente, o que pode acontecer em um aplicativo "corporativo" com uma hierarquia de vários carregadores de classe (como um aplicativo da web Java EE).A linha a seguir pode ser usada se quisermos especificar o caminho relativo do arquivo.
fonte
InputStream
?InputStream is = new FileInputStream("./properties/files/ListStopWords.txt");
O caminho relativo funciona em java usando o. operador.
Portanto, a questão é como saber o caminho para onde o java está procurando atualmente?
faça uma pequena experiência
Observe a saída, você conhecerá o diretório atual onde o java está procurando. A partir daí, simplesmente use o operador ./ para localizar seu arquivo.
por exemplo, se a saída for
e seu arquivo está presente na pasta MyProject basta usar
Espero que isto ajude
fonte
fonte
.class
literal apenas fornecendo o nome completo de sua classe.experimentar
.\properties\files\ListStopWords.txt
fonte
Eu poderia ter comentado, mas tenho menos reputação para isso. A resposta de Samrat fez o trabalho para mim. É melhor ver o caminho do diretório atual por meio do código a seguir.
Eu simplesmente usei isso para corrigir um problema que estava enfrentando em meu projeto. Certifique-se de usar ./ para voltar ao diretório pai do diretório atual.
fonte
Embora a resposta fornecida pelo BalusC funcione para este caso, ela será interrompida quando o caminho do arquivo contiver espaços porque em uma URL, eles estão sendo convertidos para% 20, que não é um nome de arquivo válido. Se você construir o objeto File usando um URI em vez de uma String, os espaços em branco serão tratados corretamente:
fonte
Eu queria analisar 'command.json' dentro de src / main // js / Simulator.java. Para isso copiei o arquivo json na pasta src e dei o caminho absoluto assim:
fonte
Supondo que você queira ler do
resources
diretório naFileSystem
classe.Nota: a liderança
.
não é necessária.fonte
Para mim, na verdade, o problema é o caminho de classe do objeto File
<project folder path> or ./src
, então o usoFile file = new File("./src/xxx.txt");
resolveu meu problemafonte
String basePath = new File ("myFile.txt"). GetAbsolutePath (); este caminho de base você pode usar como o caminho correto do seu arquivo
fonte
Se você está tentando chamar
getClass()
de um método estático ou bloco estático, você pode fazer o seguinte.Você pode chamar
getClass()
oProperties
objeto que está carregando.fonte
Se o arquivo de texto não estiver sendo lido, tente usar um caminho absoluto mais próximo (se desejar, pode usar o caminho absoluto completo) como este:
suponha que o caminho absoluto seja:
fonte