如何使用Java代码获取播放文件的时长

如何使用Java代码获取播放文件的时长,第1张

java中直接使用AudioInputStream类来 *** 作音乐文件,获取时长,实例如下:

import javaioFile;

import javaioIOException;

import javaxsoundsampledAudioInputStream;

import javaxsoundsampledAudioSystem;

import javaxsoundsampledClip;

import javaxsoundsampledLineUnavailableException;

import javaxsoundsampledUnsupportedAudioFileException;

public class AudioLength {

public static void main(String[] args) throws LineUnavailableException,

UnsupportedAudioFileException, IOException {

File file = new File("d:/testwav");

Clip clip = AudioSystemgetClip();

AudioInputStream ais = AudioSystemgetAudioInputStream(file);

clipopen(ais);

Systemoutprintln( clipgetMicrosecondLength() / 1000000D + " s" );//获取音频文件时长

}

}

您可以使用以下代码来实现您的需求:

该代码会创建一个 FileInputStream 对象,该对象将从指定的文件路径中读取数据。然后,它会创建一个长度为 1024 的字节数组,并使用 fisread(buf) 方法将文件内容读取到该数组中。最后,它会将读取到的内容输出到控制台,并关闭输入流。

Try again

//根据你的要求修改了一下代码,现在已经能将某文件夹下的所有指定类型文件复制到

//指定文件夹下了

import javaioBufferedInputStream;

import javaioBufferedOutputStream;

import javaioFile;

import javaioFileInputStream;

import javaioFileOutputStream;

public class ReadFiles {

public static final String FILTER = "xml";

public static final String SRC_DIR = "E:\\StudyData";// 待扫描的文件夹

public static final String DES_DIR = "E:\\testdata";// 复制后的目标文件夹

public static void main(String[] args) {

long a = SystemcurrentTimeMillis();

scanDir(SRC_DIR, DES_DIR);

Systemoutprintln("共花费时间:"+(SystemcurrentTimeMillis() - a)/1000+"秒");

}

public static void scanDir(String srcPath, String desPath) {

File dir = new File(srcPath);

File[] files = dirlistFiles();

if (files == null)

return;

for (int i = 0; i < fileslength; i++) {

if (files[i]isDirectory()) {

scanDir(files[i]getAbsolutePath(), desPath);

} else {

String strFileName = files[i]getAbsolutePath()toLowerCase();

copyFile(strFileName, desPath + files[i]getName());

}

}

}

public static void copyFile(String srcName, String destName) {

if (srcNameendsWith(FILTER)) {

Systemoutprintln("正在复制文件 "+srcName+" 至 "+destName);

try {

BufferedInputStream in = new BufferedInputStream(

new FileInputStream(srcName));

BufferedOutputStream out = new BufferedOutputStream(

new FileOutputStream(destName));

int i = 0;

byte[] buffer = new byte[2048];

while ((i = inread(buffer)) != -1) {

outwrite(buffer, 0, i);

}

outclose();

inclose();

} catch (Exception ex) {

exprintStackTrace();

}

}

}

}

1:Jsp页面:

[html] view plain copy

<td><img src="${ctx}/mongoImg/show"></td>

2:xml配置:

[html] view plain copy

<xml version="10" encoding="UTF-8">

<beans xmlns=">

xmlns:xsi=">

xmlns:mongo=">

xsi:schemaLocation=">

>

>

>

>

>

<mongo:mongo host="${resourcedbhost}" port="${resourcedbport}" />

<mongo:db-factory id="mongoDbFactory" dbname="gate" mongo-ref="mongo" />

<bean class="orgspringframeworkdatamongodbgridfsGridFsTemplate">

<constructor-arg ref="mongoDbFactory" />

<constructor-arg ref="converter" />

</bean>

<mongo:mapping-converter id="converter"/>

</beans>

3:java后台代码

[java] view plain copy

package comcrscicigmsmanagerweb;

import javaioOutputStream;

import javautilList;

import javaxservlet>

import javaxservlet>

import orgspringframeworkbeansfactoryannotationAutowired;

import orgspringframeworkdatamongodbgridfsGridFsTemplate;

import orgspringframeworkstereotypeController;

import orgspringframeworkwebbindannotationRequestMapping;

import commongodbgridfsGridFSDBFile;

@Controller

@RequestMapping(value = "/mongoImg")

public class MongoImgController {

@Autowired

GridFsTemplate gridFsTemplate;

@RequestMapping(value = "/show")

public void show(>

try {

OutputStream out = respgetOutputStream();

respsetContentType("image/png");

List<GridFSDBFile> find = gridFsTemplatefind(null);

GridFSDBFile gridFSDBFile = findget(0);

gridFSDBFilewriteTo(out);

outflush();

outclose();

} catch (Exception e) {

eprintStackTrace();

}

}

}

在JAVA代码中,因为只是个例子而已,所以我使用的是gridFsTemplatefind(null);查询的全部,而且数据库中只有2条数据,我这里就把第一条数据查出来作为例子了。各位可以根据自己的业务需要,在页面传递参数进来,并且查询特定的数据。

/

根据提供地址读取文件返回字符串

@param filePath

@return 文件字符串

/

private String readFile(String filePath){

File javaFile = new File(filePath);

StringBuffer fileStr = new StringBuffer();//存储杜浒的文件字符串,

int b;

InputStream fileIns = null;

InputStreamReader fileReder = null;

try {

fileIns = new FileInputStream(javaFile);

fileReder = new InputStreamReader(fileIns, "utf-8");

while ((b = fileRederread()) != -1) {

fileStrappend((char) b);

}

// Systemoutprintln(javaStrtoString());

} catch (FileNotFoundException e) {

eprintStackTrace();

} catch (IOException e) {

eprintStackTrace();

} finally {

try {

if (fileReder != null) {

fileRederclose();

}

if (fileIns != null) {

fileInsclose();

}

} catch (IOException e) {

eprintStackTrace();

}

}

if(fileStrlength()>0){

return fileStrtoString();

}else{

return "";

}

// Systemoutprintln(result);

}

仅供参考!

Java只能读取到文件的最后修改时间,不能获取创建时间,

创建时间是利用了cmd命令获取的:

public class FileTest {

 

 public static void main(String[] args) {

  getCreateTime("d:\\test-1txt");

  getModifiedTime("d:\\test-1txt");

 }

 

 public static void getCreateTime(String filePath) {

  String strTime = null;

  try {

   Process p = RuntimegetRuntime()exec("cmd /C dir " + filePath + "/tc");

   InputStream is = pgetInputStream();

   BufferedReader br = new BufferedReader(new InputStreamReader(is));

   String line;

   while ((line = brreadLine()) != null) {

    if (lineendsWith("txt")) {

     strTime = linesubstring(0, 17);

     break;

    }

   }

  } catch (IOException e) {

   eprintStackTrace();

  }

  Systemoutprintln("创建时间    " + strTime);

 }

 public static void getModifiedTime(String filePath) {

  long time = new File(filePath)lastModified();

  String ctime = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")format(new Date(time));

  Systemoutprintln("修改时间[1] " + ctime);

 }

}

你来看下这句话

farmers[i]price=IntegerparseInt(t1[0]);//编译器说这行错了,为什么啊?

farmers[i]amount=IntegerparseInt(t1[1]);

farmers[i]存的是一个对象farmer,你还没有new这个对象,你直接就令数组里面的farmers[i]price=int这个是不正确的,因为farmers[i]price根本不存在,所以会抛出nullpoint错误。

正确的做法是先Farmer f = new Farmer();

然后令fprice=IntegerparseInt(t1[0]);

然后再存进数组farmers[i]=f

注意:帮你写的是内部类,Farmer f = new Farmer()可能读取不到,所以建议你单独写一个farmer类,然后引用,希望对你有帮助

以上就是关于如何使用Java代码获取播放文件的时长全部的内容,包括:如何使用Java代码获取播放文件的时长、编JAVA程序获取指定D盘下file.txt内容要求创建一个fis字节输入流对象一个buf字节组长度定义为1024整数倍、java怎么样获取路径下的文件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9327690.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存