JAVA界面化统计一个文件夹下所有PDF的总页数

效果实例
输入文件夹的绝对路径,点击统计按钮即可(可使用exe4j打包成exe的应用程序)
代码实例

package com.file;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import javax.swing.*;
import org.apache.pdfbox.pdmodel.PDDocument;
/**
 * @param 统计某个文件夹下Pdf总页数
 */
public class CountPdf extends JFrame implements ActionListener{
	//定义组件
	JPanel jp1,jp2,jp3,jp4;//面板
	JLabel jlb1,jlb2,jlb3;//标签
	JButton jb1,jb2;//按钮
	JTextField jtfpath,jtfcount;//文本框
	//存放所有文件的List路径集合
	ArrayList<File> fileList;
	
	public static void main(String[] args) {
		CountPdf countPdf=new CountPdf();
	}
	
	public CountPdf(){
		//创建面板
		jp1=new JPanel();
		jp2=new JPanel();
		jp3=new JPanel();
		jp4=new JPanel();
		//创建标签
		jlb1=new JLabel("文件夹绝对路径:");
		jlb2=new JLabel("PDF总页数:");
		jlb3=new JLabel("绝对路径例如      F:\\ARCHROOT\\GDPdf");
		//创建按钮
		jb1=new JButton("统计");
		jb2=new JButton("重置");
		//设置监听
		jb1.addActionListener(this);
		jb2.addActionListener(this);
		
		//创建路径文本框
		jtfpath=new JTextField(20);
		//创建页数文本框
		jtfcount=new JTextField(8);
		//设置布局管理
		this.setLayout(new GridLayout(4, 3));//网格式布局
		//加入各个组件
		jp1.add(jlb1);
		jp1.add(jtfpath);
		jp2.add(jlb2);
		jp2.add(jtfcount);
		jp3.add(jb1);
		jp3.add(jb2);
		jp4.add(jlb3);
		//加入到JFrame
		this.add(jp1);
		this.add(jp2);
		this.add(jp3);
		this.add(jp4);
		//设置窗体
		this.setTitle("文件夹下PDF页数统计");//窗体标签
		this.setSize(400, 250);//窗体大小
		this.setLocationRelativeTo(null);//在屏幕中间显示(居中显示)
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出关闭JFrame
		this.setVisible(true);//显示窗体
		//锁定窗体
		this.setResizable(false);
	}

	/**
	 * 监听方法
	 */
	@Override
	public void actionPerformed(ActionEvent e) {
		if(e.getActionCommand()=="统计"){
			count();
		}else if(e.getActionCommand()=="重置"){
			clear();
		}	
	}

	/**
	 * 清空文本框
	 */
	private void clear() {
		jtfpath.setText("");
		jtfcount.setText("");
	}

	/**
	 * 信息验证
	 */
	private void count() {
		if(jtfpath.getText().isEmpty()){
			JOptionPane.showMessageDialog(null,"请输入需要统计的路径!","提示消息",JOptionPane.WARNING_MESSAGE);
		}else{
			//统计页数
			File file = new File(jtfpath.getText());
			if(file.exists()){
				fileList = new ArrayList<File>();
				countYs(jtfpath.getText());
				int ys = returnYs();
				jtfcount.setText(ys+"");
			}else{
				JOptionPane.showMessageDialog(null,"路径输入有误或不存在此路径!","提示消息",JOptionPane.WARNING_MESSAGE);
			}
		}
	}
	
	/**
	 * 统计页数
	 * @param fileDir
	 */
	private void countYs(String fileDir) {
		File file = new File(fileDir);
		//获取目录下的所有文件或文件夹
		File[] files = file.listFiles();
		if (files == null || files.length == 0) {// 如果目录为空,直接退出
			return;
		}
		// 遍历,目录下的所有文件
		for (File f : files) {
			//文件
			if (f.isFile()) {
				fileList.add(f);
			//目录
			} else if (f.isDirectory()) {
				countYs(f.getAbsolutePath());
			}
		}
	}
	
	private int returnYs(){
		int ys = 0;
		//循环遍历所有文件,进行页数统计
		for (File f1 : fileList) {
			if(f1.getName().endsWith("pdf")||f1.getName().endsWith("PDF")){
				PDDocument doc;
				try {
					doc = PDDocument.load(f1);
					ys += doc.getPageCount();
					doc.close();
				} catch (IOException e) {
					e.printStackTrace();
					continue;
				}
			}
		}
		return ys;
	}
}

所需jar包
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值