Como devo carregar arquivos em meu aplicativo Java?

Como devo carregar arquivos em meu aplicativo Java?

A resposta curta

Use um desses dois methods:

  • Class.getResource(String)
  • Class.getResourceAsStream(String)

Por exemplo:

 InputStream inputStream = YourClass.class.getResourceAsStream("image.jpg"); 

A longa resposta

Normalmente, não se deseja carregar arquivos usando caminhos absolutos. Por exemplo, não faça isso se puder ajudar:

 File file = new File("C:\\Users\\Joe\\image.jpg"); 

Essa técnica não é recomendada por pelo menos dois motivos. Primeiro, cria uma dependência em um sistema operacional específico, o que impede que o aplicativo se mova facilmente para outro sistema operacional. Um dos principais benefícios do Java é a capacidade de executar o mesmo bytecode em muitas plataformas diferentes. Usar um caminho absoluto como esse torna o código muito menos portátil.

Segundo, dependendo da localização relativa do arquivo, essa técnica pode criar uma dependência externa e limitar a mobilidade do aplicativo. Se o arquivo existir fora do diretório atual do aplicativo, isso cria uma dependência externa e é necessário estar ciente da dependência para mover o aplicativo para outra máquina (propensa a erros).

Em vez disso, use os methods getResource() na class Class . Isso torna o aplicativo muito mais portátil. Ele pode ser movido para diferentes plataformas, máquinas ou diretórios e ainda funcionar corretamente.

getResource é bom, mas o uso de caminhos relativos também funcionará da mesma forma, contanto que você possa controlar onde seu diretório de trabalho está (o que você geralmente pode).

Além disso, a dependência da plataforma em relação ao caractere separador pode ser obtida usando File.separator , File.separatorChar ou System.getProperty (“file.separator”) .

O que você está carregando os arquivos para – configuração ou dados (como um arquivo de input) ou como um recurso?

  • Se como recurso, siga a sugestão e o exemplo dado por Will e Justin
  • Se a configuração, então você pode usar um ResourceBundle ou Spring (se sua configuração é mais complexa).
  • Se você precisar ler um arquivo para processar os dados, esse trecho de código pode ajudar BufferedReader file = new BufferedReader(new FileReader(filename)) e, em seguida, ler cada linha do arquivo usando file.readLine(); Não esqueça de fechar o arquivo.

Eu não tive um problema apenas usando separadores de caminho no estilo unix, mesmo no Windows (embora seja uma boa prática verificar File.separatorChar ).

A técnica de usar ClassLoader.getResource () é melhor para resources somente leitura que serão carregados de arquivos JAR. Às vezes, você pode determinar programaticamente o diretório do aplicativo , o que é útil para arquivos configuráveis ​​pelo administrador ou aplicativos do servidor. (É claro que os arquivos editáveis ​​pelo usuário devem ser armazenados em algum lugar no diretório System.getProperty (“user.home”) .)

 public byte[] loadBinaryFile (String name) { try { DataInputStream dis = new DataInputStream(new FileInputStream(name)); byte[] theBytes = new byte[dis.available()]; dis.read(theBytes, 0, dis.available()); dis.close(); return theBytes; } catch (IOException ex) { } return null; } // ()