计算自己Java学习之路的代码量小工具

1. 导入模块

import os
import tkinter as tk
from tkinter import filedialog, messagebox
  • os:用于处理文件和目录路径的模块,os.walk() 方法可以遍历目录中的所有文件。
  • tkinter:Python 的标准库之一,用来创建图形用户界面 (GUI)。
  • filedialogmessagebox:来自 tkinter 模块,分别用于文件选择对话框和消息框。

2. 代码行数统计函数

def count_lines_in_file(file_path):
    """统计指定文件的代码行数(忽略空行和注释)"""
    lines_of_code = 0
    with open(file_path, 'r', encoding='utf-8') as file:
        for line in file:
            stripped_line = line.strip()
            # 跳过空行
            if not stripped_line:
                continue
            # 统计有效代码行
            lines_of_code += 1
    return lines_of_code
  • count_lines_in_file:用于打开指定的 Java 文件并统计其中的代码行数,忽略空行。
  • stripped_line = line.strip():去除每行代码前后的空白字符(如空格、制表符等)。
  • 如果该行内容为空,跳过此行。
  • 每行有效代码行数累加,最后返回文件的总有效行数。

3. 遍历文件夹并统计 Java 文件行数

def traverse_and_count_java(folder_path):
    """遍历指定文件夹,统计所有 Java 文件的代码行数"""
    total_lines = 0
    java_files = 0
    folder_count = 0

    if not os.path.exists(folder_path):
        messagebox.showerror("Error", "路径不存在!")
        return total_lines, java_files

    # 遍历文件夹中的所有文件
    for root, dirs, files in os.walk(folder_path):
        folder_count += 1
        for file in files:
            if file.endswith('.java'):
                file_path = os.path.join(root, file)
                lines_in_file = count_lines_in_file(file_path)
                total_lines += lines_in_file
                java_files += 1

    return total_lines, java_files
  • traverse_and_count_java:递归遍历给定文件夹中的所有文件,统计 .java 文件的数量及其代码行数。
  • os.path.exists(folder_path):检查输入的文件夹路径是否存在。如果不存在,弹出错误提示框。
  • os.walk(folder_path):递归遍历文件夹中的所有子文件夹和文件。
  • 每找到一个 .java 文件,就调用 count_lines_in_file 来计算其代码行数,同时累加总行数和 Java 文件数量。

4. 文件夹选择功能

def browse_folder():
    """选择文件夹"""
    folder_path = filedialog.askdirectory()
    entry_folder.delete(0, tk.END)
    entry_folder.insert(0, folder_path)
  • browse_folder:点击“浏览”按钮后调用的函数,用于弹出文件夹选择对话框,用户选择文件夹后,将路径显示在输入框中。
  • filedialog.askdirectory():用于弹出选择文件夹的对话框。

5. 计算代码行数并显示结果

def calculate_code_lines():
    """计算代码行数并显示结果"""
    folder_path = entry_folder.get()
    if not folder_path:
        messagebox.showerror("Error", "请输入文件夹路径或选择文件夹!")
        return

    total_lines, java_files = traverse_and_count_java(folder_path)
    if java_files > 0:
        messagebox.showinfo("统计结果", f"Java 文件数: {java_files}\n总代码行数: {total_lines}")
    else:
        messagebox.showinfo("统计结果", "未找到 Java 文件!")
  • calculate_code_lines:用户点击“计算代码行数”按钮时执行。先获取用户输入的文件夹路径,如果路径为空,则弹出错误提示框;否则调用 traverse_and_count_java 函数来统计文件夹中的 Java 文件数及总代码行数。
  • 如果找到了 Java 文件,则弹出包含统计结果的消息框;否则提示“未找到 Java 文件”。

6. 主窗口的界面布局

root = tk.Tk()
root.title("Java 代码行数统计器")

frame = tk.Frame(root)
frame.pack(pady=10)

label_folder = tk.Label(frame, text="文件夹路径:")
label_folder.pack(side=tk.LEFT)

entry_folder = tk.Entry(frame, width=50)
entry_folder.pack(side=tk.LEFT)

button_browse = tk.Button(frame, text="浏览", command=browse_folder)
button_browse.pack(side=tk.LEFT)

button_calculate = tk.Button(root, text="计算代码行数", command=calculate_code_lines)
button_calculate.pack(pady=10)

root.mainloop()
  • root = tk.Tk():创建主窗口。
  • frame:用于组织输入框、标签和按钮的框架。
  • entry_folder:输入框,用于显示或输入文件夹路径。
  • button_browsebutton_calculate:按钮,分别用于浏览文件夹和开始计算代码行数。
  • root.mainloop():进入 Tkinter 的事件循环,等待用户的操作。

总结

  • 这段代码的主要功能是通过图形化界面选择文件夹,并统计该文件夹中所有 Java 文件的代码行数。
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值