1. 导入模块
import os
import tkinter as tk
from tkinter import filedialog, messagebox
os
:用于处理文件和目录路径的模块,os.walk()
方法可以遍历目录中的所有文件。tkinter
:Python 的标准库之一,用来创建图形用户界面 (GUI)。filedialog
和 messagebox
:来自 tkinter
模块,分别用于文件选择对话框和消息框。
2. 代码行数统计函数
def count_lines_in_file(file_path):"""统计指定文件的代码行数(忽略空行和注释)"""lines_of_code = 0with open(file_path, 'r', encoding='utf-8') as file:for line in file:stripped_line = line.strip()if not stripped_line:continuelines_of_code += 1return lines_of_code
count_lines_in_file
:用于打开指定的 Java 文件并统计其中的代码行数,忽略空行。stripped_line = line.strip()
:去除每行代码前后的空白字符(如空格、制表符等)。- 如果该行内容为空,跳过此行。
- 每行有效代码行数累加,最后返回文件的总有效行数。
3. 遍历文件夹并统计 Java 文件行数
def traverse_and_count_java(folder_path):"""遍历指定文件夹,统计所有 Java 文件的代码行数"""total_lines = 0java_files = 0folder_count = 0if not os.path.exists(folder_path):messagebox.showerror("Error", "路径不存在!")return total_lines, java_filesfor root, dirs, files in os.walk(folder_path):folder_count += 1for 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_filejava_files += 1return 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", "请输入文件夹路径或选择文件夹!")returntotal_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_browse
和 button_calculate
:按钮,分别用于浏览文件夹和开始计算代码行数。root.mainloop()
:进入 Tkinter 的事件循环,等待用户的操作。
总结
- 这段代码的主要功能是通过图形化界面选择文件夹,并统计该文件夹中所有 Java 文件的代码行数。