Crie um objeto File na memória a partir de uma string em Java


113

Tenho uma função que aceita Arquivo como argumento. Não quero criar / gravar um novo arquivo (não tenho acesso de gravação ao sistema de arquivos) para passar meus dados de string para a função. Devo acrescentar que os dados da String não existem em um arquivo (portanto, não posso ler meus dados de um arquivo).

Posso usar Streams e "lançá-los" em objetos File?


2
Você pode vincular / postar o código que leva um Fileobjeto? Como as respostas declararam, um Fileobjeto é como uma referência a um local no sistema de arquivos e, portanto, seria difícil de simular sem um arquivo real. Se, no entanto, sua função tiver a FileReaderou a FileInputStream, você poderá facilmente modificar o código para aceitar entradas que não sejam de arquivo.
101100 de

Arquivos mapeados na memória podem ser sua escolha. Esses são arquivos especiais em Java que permitem ao programa Java acessar o conteúdo diretamente da memória. Para obter detalhes, acesse este link: javarevisited.blogspot.com/2012/01/…
Bacteria

Respostas:


48

Não; instâncias de classe Filerepresentam um caminho em um sistema de arquivos. Portanto, você pode usar essa função apenas com um arquivo. Mas talvez haja uma sobrecarga que leva um InputStream?


76

Normalmente, quando um método aceita um arquivo, há outro método próximo que aceita um fluxo. Se não for o caso, a API está mal codificada. Caso contrário, você pode usar arquivos temporários, onde a permissão geralmente é concedida em muitos casos. Se for um miniaplicativo, você pode solicitar permissão de gravação .

Um exemplo:

try {
    // Create temp file.
    File temp = File.createTempFile("pattern", ".suffix");

    // Delete temp file when program exits.
    temp.deleteOnExit();

    // Write to temp file
    BufferedWriter out = new BufferedWriter(new FileWriter(temp));
    out.write("aString");
    out.close();
} catch (IOException e) {
}

1
Não é possível solicitar permissão de gravação (é Google AppEngine)
Jon Romero

12

Um objeto File em Java é uma representação de um caminho para um diretório ou arquivo, não o próprio arquivo. Você não precisa ter acesso de gravação ao sistema de arquivos para criar um Fileobjeto, você só precisa dele se realmente pretende gravar no arquivo (usando um FileOutputStream, por exemplo)


1
Se você precisa passar um arquivo para uma API externa, você precisa de um arquivo real - passar um objeto File "vazio" não funcionará.
Andrei Volgin

8

A Fileclasse representa a "ideia" de um arquivo, não um identificador real a ser usado para E / S. É por isso que a Fileclasse tem um .exists()método, para dizer se o arquivo existe ou não. (Como você pode ter um Fileobjeto que não existe?)

Por outro lado, construir um new FileInputStream(new File("/my/file"))fornece um fluxo real para ler bytes.


-1
FileReader r = new FileReader(file);

Use um leitor de arquivos, carregue o arquivo e grave seu conteúdo em um buffer de string.

exemplo

O link acima mostra um exemplo de como fazer isso. Como outra postagem para esta resposta diz para carregar um arquivo na memória, você não precisa de acesso de gravação, desde que não planeje fazer alterações no arquivo real.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.