1. 程式人生 > >【java】檔案格式轉換

【java】檔案格式轉換

【前言】

    敲黑板、咳~本文涉及兩個內容: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包檔案所在的路徑
,並依次指定了自定義的GroupId、ArtifactId和Version資訊。 

通過這種方式,可以簡單快速地將第三方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

還有些文章,忘記了連線、謝謝大家的分享