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 = 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_browse
和 button_calculate
:按钮,分别用于浏览文件夹和开始计算代码行数。root.mainloop()
:进入 Tkinter 的事件循环,等待用户的操作。
总结
- 这段代码的主要功能是通过图形化界面选择文件夹,并统计该文件夹中所有 Java 文件的代码行数。