Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取文件持续时间Google App云存储服务器_Java_Google App Engine_Servlets_Mp3_Google Cloud Storage - Fatal编程技术网

Java 获取文件持续时间Google App云存储服务器

Java 获取文件持续时间Google App云存储服务器,java,google-app-engine,servlets,mp3,google-cloud-storage,Java,Google App Engine,Servlets,Mp3,Google Cloud Storage,我正在谷歌云存储mp3文件,我想知道这些文件的持续时间。 我曾尝试过这样做,但不知何故它不起作用: ListResult lr = gcsService.list(mybucketname, ListOptions.DEFAULT); while (lr.hasNext() && playlistLength > 0) { ListItem li = lr.next(); String filename = "/gs/mybucke

我正在谷歌云存储mp3文件,我想知道这些文件的持续时间。 我曾尝试过这样做,但不知何故它不起作用:

 ListResult lr = gcsService.list(mybucketname, ListOptions.DEFAULT);
    while (lr.hasNext() && playlistLength > 0) {
        ListItem li = lr.next();
        String filename = "/gs/mybucketname/" + li.getName();
        AppEngineFile readableFile = new AppEngineFile(filename);
        String st = readableFile.getFullPath();
        File file = new File(st);
        AudioInputStream audioInputStream = null;
        try {
           audioInputStream = AudioSystem.getAudioInputStream(file);
        } catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
        }
        AudioFormat format = audioInputStream.getFormat();
        long frames = audioInputStream.getFrameLength();
        double durationInSeconds = (frames+0.0) / format.getFrameRate();
        playlistLength-=(int)(durationInSeconds)/60;
    }
}

此代码可能会起到以下作用:

String filename = li.getName();
GcsService gcsService =
GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());
GcsInputChannel readChannel = gcsService.openPrefetchingReadChannel(new GcsFilename(mybucketName, fileName), 0, 1024 * 1024);
AudioInputStream audioInputStream;
try (InputStream in = Channels.newInputStream(readChannel)) {
   audioInputStream = AudioSystem.getAudioInputStream(in);
}
但是正如我们在评论中发现的,Appengine不支持
AudioSystem
类、整个包
javax.sound
的问题

另请看文档:


有跟踪记录吗?到底是什么不起作用?我看不到堆栈跟踪,但问题出在第行:audioInputStream=AudioSystem.getAudioInputStream(文件);是的,也许吧。你的代码看起来并不好
AppEngineFile
已经过时,不推荐使用,并且不确定这几天是否还能工作。从这个路径创建
文件
很可能是无用的(我没有尝试过)。你为什么要这样做?你看过官方文件了吗?哦……那么你知道另一种获取文件路径或执行我尝试执行的操作的方法吗?@davidmoshko我刚刚注意到你没有接受Igor的答案。如果你在你的应用程序中使用了他的代码,那么你应该接受他的答案(点击它旁边的空复选标记),如果你有代表的话,请向上投票:)(如果这是你想要的答案,我自己对你的另一个问题的答案也是如此:))谢谢,但这不起作用:试试(InputStream in=Channels.newInputStream)(readChannel)){audioInputStream=AudioSystem.getAudioInputStream(in);}我不知道。我看不到堆栈跟踪中有错误,但这一行使我的应用程序崩溃,因此它不再执行她需要执行的操作。你需要查看stacktrace,如果没有此类信息,就无法猜测。例如,你可以在谷歌云控制台中执行。这一行来自官方文档,这是我运行stacktrace时的外观应用程序。我能从中推断出什么?这意味着你不能使用此类类,请参阅appengine上允许的类列表: