Java:打包(jar)后引用文件,getResourceAsStream?

时间:2018-01-11 19:18:08

标签: java maven file jar stream

我正在尝试在我的项目中实现一个按钮,单击该按钮会自动加载特定文件。目前,有用户从硬盘中选择文件的按钮。

因此,我下载了特定文件并将其插入到项目中。使用File f = new File(“demofile”)或类似的东西时 。的getClass()的getResource( “/资源/ file.txt的”)的GetFile();代码在本地工作。

但是,打包项目时,会抛出FileNotFoundException。

经过大量的在线研究后,有人建议使用以下内容:

in = new TextFileFeaturedSequenceReader(TextFileFeaturedSequenceReader.FASTA_FORMAT, file, DiffEditFeaturedSequence.class);

但是,对于这个项目,我需要将文件作为文件对象引用,以便它可以作为参数传递给其他函数,例如:

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)



class MyStreamListener(tweepy.StreamListener):
    def on_status(self, status):
        MyCustomNamespace.tweet_received(status.text)


class MyCustomNamespace(Namespace):
    def on_connect(self):
        auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
        auth.set_access_token(access_token, access_secret)
        api = tweepy.API(auth)
        myStreamListener = MyStreamListener()
        global myStream
        myStream = tweepy.Stream(auth = api.auth, listener=myStreamListener)
        myStream.filter(track=['love'], async=True)

    def on_disconnect(self):
        pass

    @staticmethod
    def tweet_received(text):
        emit('tweet_response', {'text': text})

socketio.on_namespace(MyCustomNamespace('/'))

有关如何解决此问题或将流读入文件对象的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:0)

如果您绝对必须传递文件,请将您的资源复制到temporary file

Path path = Files.createTempFile(null, null);
try (InputStream stream =
        getClass().getResourceAsStream("/resources/file.txt")) {

    Files.copy(stream, path, StandardCopyOption.REPLACE_EXISTING);
}

in = new TextFileFeaturedSequenceReader(
    TextFileFeaturedSequenceReader.FASTA_FORMAT,
    path.toFile(),
    DiffEditFeaturedSequence.class);

// Use the TextFileFeaturedSequenceReader as needed

// ...

Files.delete(path);