【java】檔案格式轉換
阿新 • • 發佈:2019-01-30
【前言】
敲黑板、咳~本文涉及兩個內容:1、將mp3轉為wma,2、自定義批量轉指定資料夾下的指定檔案
【正文】
mp3轉wma,這個用到了jave,偶是maven專案,這個jar在maven倉庫是沒有足跡滴,所以怎麼辦?
電腦安裝了maven,在cmd視窗:
mvn install:install-file -Dfile=D:\ojdbc7.jar -DgroupId=com.tech4j.driver -DartifactId=oracle-connector-java -Dversion=12.1 -Dpackaging=jar
在這段命令中,-Dfile引數指你自定義JAR包檔案所在的路徑通過這種方式,可以簡單快速地將第三方JAR包安裝到本地倉庫中供Maven專案依賴使用。例如:
<dependency>
<groupId>com.tech4j.driver</groupId>
<artifactId>oracle-connector-java</artifactId>
<version>12.1</version>
</dependency>
今天2018年6月9日09:53:22用powershell執行這個命令報錯,win10:
The goal you specified requires a project to execute but there is no POM in this directory (F:\ITOOjar). Please verify you invoked Maven from the correct directory.
看資訊挺明顯的,找一個maven工程進入其根目錄(有pom.xml的地方)執行上面的執行OK了;
上網說這樣可能專案打包的時候打不了這個jar,所以保險起見,在pom檔案中新增(關於這塊,建議大家再上網確定一下)
<!--引用本地jar-->
<repositories>
<repository>
<id>jave1.0.2</id>
<url>file://${project.basedir}/repo</url>//根路徑下新建repo資料夾,把下載的jave**.jar放進去
</repository>
</repositories>
正式啟用:
/**
* 利用jave 進行轉換
*
* @param source
* @param desFileName
* @return
* @throws EncoderException
*/
public File execute(File source, String desFileName) throws EncoderException {
File target = new File(desFileName);
AudioAttributes audio = new AudioAttributes();
audio.setCodec("libmp3lame");
audio.setBitRate(new Integer(1280000));//不同格式,數值不同
audio.setChannels(new Integer(2));
audio.setSamplingRate(new Integer(44100));
EncodingAttributes attrs = new EncodingAttributes();
attrs.setFormat("mp3");
attrs.setAudioAttributes(audio);
Encoder encoder = new Encoder();
encoder.encode(source, target, attrs);
return target;
}
/**
* 單個檔案轉換 ok 利用 jave.jar maven倉庫沒有
* 需要引用本地的jar 固定執行緒池 批量 轉
* <dependency>
* <groupId>com.giska.jave</groupId>
* <artifactId>jave</artifactId>
* <version>1.0.2</version>
* </dependency>
*/
@Test
public void testJaveFiel() {
File file = new File("E:\\image\\Sleep Away.mp3");//待轉換的檔案
try {
execute(file, "E:\\image\\Sleep Away.wav");//待轉換的檔案,換成成什麼檔案
} catch (EncoderException e) {
e.printStackTrace();
}
}
上面就ok了,進入下一環節,轉換指定資料夾下指定檔案(批量哦)
//https://zhidao.baidu.com/question/617779174285688372.html
/**
* 轉資料夾的檔案格式 可指定 將**轉為**
* @throws IOException
*/
@Test
public void testTurnFile() throws IOException {
/**
* String 讀取的資料夾路徑
* String 字尾名,|分隔
* String 新的字尾名
*/
convertSuffix("E:\\image", "mp3", "wav");
}
public static final String SEPARATOR = System.getProperty("file.separator");
//轉換之後儲存的路徑
private static final String SAVE = "E:\\image\\ne";
/**
* 遞迴讀取資料夾中的特定字尾的檔案
* https://blog.csdn.net/zhpengfei0915/article/details/20614639
*
* @param path String 讀取的資料夾路徑
* @param suffix String 字尾名,|分隔
* @param newSuffix String 新的字尾名
*/
public static void convertSuffix(String path, final String suffix, final String newSuffix) throws IOException {
File p = new File(path);
String name = p.getName(), regex = "(?i)([^\\.]*)\\.(" + suffix + ")";
//如果path表示的是一個目錄則返回true
if (p.isDirectory()) {
p.list(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
if (dir.isDirectory()) {
try {
convertSuffix(dir.getAbsolutePath() + SEPARATOR + name, suffix, newSuffix);
} catch (IOException e) {
e.printStackTrace();
}
}
return false;
}
});
} else if (name.matches(regex)) {
saveFiles(path, name, newSuffix);
}
}
/**
* 讀取特定的字尾,修改後綴、儲存檔案
*
* @param path 讀取資料夾的路徑
* @param name 特定字尾的檔名
* @param newSuffix 新的字尾名
*/
public static void saveFiles(String path, String name, String newSuffix) throws IOException {
File fp = new File(path);
if (!fp.exists()) {
fp.mkdir();
}
name = name.replaceAll("([^\\.]+)(\\..*)?", "$1." + newSuffix);
InputStream is = new FileInputStream(path);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while ((len = is.read(buffer)) != -1) {
baos.write(buffer, 0, len);
}
baos.flush();
baos.close();
is.close();
byte[] data = baos.toByteArray();
FileOutputStream fos = new FileOutputStream(new File(SAVE + SEPARATOR + name));
fos.write(data);
fos.flush();
fos.close();
}
小結:
巨集觀看一遍,感覺差不多、先敲再說,網路知識一個好東西,幾乎你想要的這裡都有
感謝分享:
https://blog.csdn.net/wabiaozia/article/details/52798194
https://zhidao.baidu.com/question/617779174285688372.html
還有些文章,忘記了連線、謝謝大家的分享