我根本不熟悉Java,所以我真的可以使用你的帮助。我正在尝试从mp3文件中读取持续时间和比特率。我正在使用http://www.javazoom.net/mp3spi/documents.html中名为“mp3spi”的java库。
所以var我已经能够确定这些对象存在:
<cfset AudioFormat = createObject("java", "org.tritonus.share.sampled.TAudioFormat")>
<cfset AudioFileFormat = createObject("java", "org.tritonus.share.sampled.file.TAudioFileFormat")>
<cfset AudioFileReader = createObject("java", "javax.sound.sampled.spi.AudioFileReader")>
我在使用以下代码时遇到问题并将其转换为ColdFusion:
File file = new File("filename.mp3");
AudioFileFormat baseFileFormat = new MpegAudioFileReader().getAudioFileFormat(file);
Map properties = baseFileFormat.properties();
Long duration = (Long) properties.get("duration");
我已经尝试了几种设置上述变量的方法,但我不断收到MpegAudioFileReader或getAudioFileFormat不存在的错误。但是,当我转储用于创建Java对象的变量时,它们确实存在。
这就是我所拥有的:
<cfscript>
mp3file = FileOpen(ExpandPath("./") & originalfile, "readBinary");
baseFileFormat = AudioFileReader.getAudioFileFormat(mp3file);
properties = baseFileFormat.properties();
duration = properties.get("duration");
</cfscript>
答案 0 :(得分:6)
我不打算为你编写代码,Simone,但是有一个coupla一般提示。
File file = new File("filename.mp3");
你可能知道,CFML是松散类型的,所以你可以省去在LHS上的输入,然后你需要使用createObject()
函数来创建Java对象,你已经有了它上。 CF无法导入Java库,因此您需要提供File
类的完全限定路径。您还需要显式调用构造函数:
mp3File = createObject("java", "java.io.File").init("filename.mp3");
(正如@Leigh在下面指出的那样,file
是CFML中的一个保留字,所以最好不要将它用作变量名!所以我在这里使用mp3File
从那里......你应该能够轻松地完成其他三个陈述的工作。基本方法调用和赋值几乎可以直接从Java源代码移植,只是丢失上面的静态类型位,以及类型转换(long)
等。
如果您无法从此处对所有内容进行排序,请通过实验更新您的问题,我们可以改进此答案(或者有人可以发布不同的答案)。但是你需要告诉我们你的具体问题,而不仅仅是一般的“请写我的代码”。人们不会这样做,你不应该要求人们到这里(这违反规则,人们对StackOverflow的规则非常重视)。
答案 1 :(得分:5)
mp3file = createObject("java", "java.io.File").init("filename.mp3");
baseFileFormat = createObject("java", "path.to.MpegAudioFileReader").init().getAudioFileFormat(mp3file);
properties = baseFileFormat.properties();
duration = properties.get("duration");
Adam的指导是正确的,因为在初始化变量时输入变量不会飞。我没有设置ColdFusion环境来尝试这个,但是在过去我们使用类似上面的方法来扩展ColdFusion的Hibernate集成,方法是创建Java类的实例并调用它们的方法。只要您所依赖的外部库在ColdFusion服务器的类路径中,就不会有任何问题。