Java技术之提取指定文件

 

 

目录

 序幕

详解

开发工具

简介

主线程代码

静态变量

 复制指定文件的方法创建

分析并实现

在Main主线程中的使用

简单搬运


 序幕

        嗨嗨,我又来咯~

        距离上一次发布已经有了很长一段时间,问我在干嘛?我在消磨人生,直到昨天,收到了来自父亲的这样一则要求:下载一些老歌存放到U盘中。

        乍一听好像没啥问题,直到我下载了歌曲后去对应下载目录查看的时候,我震惊了,下载目录中的格式为什么这么多。图片的jpg,歌曲的mp3,还有我不认识的lrc文件。

         现在很好的解决方案就是搜索后缀是.mp3的文件统一复制到一个新的目录,但是歌曲实在是多的令人发麻,32GB内存的U盘我下载了近30G的歌单,对于我的电脑来说,资源管理器搜索和复制的工作量可能会导致停止运行。于是我便想,为什么不靠Java来实现文件的搬运呢,省时省力还不用我自己每次亲自上手操作,于是这一Class文件就来了。


 

详解

        对于不想进行观看的小伙伴们,可以直接拉到底部进行代码搬运,使用时只需要进行一些简单的修改即可使用。

开发工具

下面来介绍一些都需要哪些内容来进行开发编程

        开发工具:任意一款Java开发工具,IDEA,Eclipse,VSCode,甚至是Txt

        Jar包:我使用的JUnit4.13.2来代替了Main,可以把@Test注解的代码放进Main中进行执行,针对IO流的开发,使用commons-io.jar可以更加省时,但我更喜欢自己钻研。

简介

我们需要操作的很简单,只需要对IO流的简单了解即可,下面进入正题

主线程代码

针对引入文件目录和导出文件目录进行创建,使用new File简单形式来对其进行创建

File in = new File("D:\\Downloads\\导入目录");
File out = new File("D:\\Downloads\\导出目录");

         导入目录一定是存在的,毕竟我们应该不会给一个不存在的目录来进行导入,那么这个in变量可以不用再管了,重要的是导出目录。

        导出目录是不一定存在的,这时候我们就要对其判断目录的存在性,甚至需要判断这个名称是否是一个Directory而不是File。这里我只是判断了导出目录是否存在。

if (!out.exists()){
    try {
        out.mkdirs();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

静态变量

我在类文件中设置了一个静态变量来进行对歌曲数量的统计,简单的一行代码。

private static int count = 0;

 复制指定文件的方法创建

由于我是为了搬运mp3歌曲,所以将方法名创建为saveMusic(File src, File dest),通过src和dest来进行源目录接入和目标目录输出,具体方法创建如下。

public static void saveMusic(File src, File dest) {}

分析并实现

1、创建存储指定后缀的字符串:String musicEndWiths = ".mp3"。

2、创建一个File[]数组来进行接收目录下的所有文件:File[] files = src.listFiles()。

3、通过foreach方法遍历所有文件,判断是否为目录,是的话自调用saveMusic方法,否则判断是否为文件且后缀与musicEndWiths相同,判定成功后进入下一项。

4、创建一个文件对象,路径为:目标路径+文件名new File(dest,file.getName())。

5、判断这个文件是否存在,这个地方是为了不重复保存相同的文件,仅有在文件不存在的时候才会创建文件进行使用mp3.createNewFile()。

6、创建Buffer缓冲字节输入输出流进行包装原始流,对歌曲文件进行提取和写入。

7、每次成功导入歌曲后执行count++操作来统计数据。

8、关闭所有的流对象。

    public static void saveMusic(File src, File dest) {
        String musicEndWiths = ".mp3";
        File[] files = src.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                saveMusic(file, dest);
            } else if (file.isFile() && file.getName().endsWith(musicEndWiths)) {
                try {
                    File mp3 = new File(dest,file.getName());
                    if (mp3.exists()==false){
                        mp3.createNewFile();
                        BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
                        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(mp3));
                        byte[] buffer = new byte[(int)file.length()];
                        in.read(buffer);
                        out.write(buffer);
                        out.flush();
                        System.out.println("歌曲:" + mp3.getName() + "已成功添加!");
                        count++;
                        out.close();
                        in.close();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

 

在Main主线程中的使用

通过saveMusic(in, out)来进行方法的执行调用。

方法结束后使用System.out.printf("成功添加:" + count + " 首歌曲。")来看歌曲总数。

 


简单搬运

package com.cn.print;

import org.junit.Test;

import java.io.*;

public class Mp3Print {
    private static int count = 0;
    @Test
    public void toMp3File() {
        File in = new File("D:\\导入目录");
        File out = new File("D:\\导出目录");
        if (!out.exists()){
            try {
                out.mkdirs();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        saveMusic(in, out);
        System.out.printf("成功添加:" + count + " 首歌曲。");
    }
    public static void saveMusic(File src, File dest) {
        String musicEndWiths = ".mp3";
        File[] files = src.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                saveMusic(file, dest);
            } else if (file.isFile() && file.getName().endsWith(musicEndWiths)) {
                try {
                    File mp3 = new File(dest,file.getName());
                    if (mp3.exists()==false){
                        mp3.createNewFile();
                        BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
                        BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(mp3));
                        byte[] buffer = new byte[(int)file.length()];
                        in.read(buffer);
                        out.write(buffer);
                        out.flush();
                        System.out.println("歌曲:" + mp3.getName() + "已成功添加!");
                        count++;
                        out.close();
                        in.close();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用Java语言从PDF文件提取部分指定文字和图片的示例代码: 1. 提取文字 ```java import java.io.File; import java.io.IOException; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.text.PDFTextStripper; public class PDFTextExtractor { public static void main(String[] args) throws IOException { File file = new File("example.pdf"); PDDocument document = PDDocument.load(file); PDFTextStripper stripper = new PDFTextStripper(); stripper.setStartPage(1); stripper.setEndPage(1); String text = stripper.getText(document); System.out.println(text); document.close(); } } ``` 上面的代码使用Apache PDFBox库从指定的PDF文件提取第一页的文本内容,并将其打印到控制台。 2. 提取图片 ```java import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.rendering.PDFRenderer; public class PDFImageExtractor { public static void main(String[] args) throws IOException { File file = new File("example.pdf"); PDDocument document = PDDocument.load(file); PDFRenderer renderer = new PDFRenderer(document); BufferedImage image = renderer.renderImage(0); ImageIO.write(image, "png", new File("image.png")); document.close(); } } ``` 上面的代码使用Apache PDFBox库从指定的PDF文件提取第一页的图像,并将其保存为PNG格式的图像文件。可以根据需要修改参数以提取其他页面的图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值