为什么用PHP呢,因为有PHP环境,没有PHP环境的,还是不方便,记录一下
<?php
/**
- Java文件注释移除工具
- 功能:遍历当前目录及子目录,移除所有Java文件中的注释
- 包括单行注释//和多行注释
*/
// 备份原文件的目录
$backupDir = DIR . '/java_backups/';
// 创建备份目录(如果不存在)
if (!is_dir($backupDir)) {
mkdir($backupDir, 0777, true);
}
/**
- 递归遍历目录,处理所有Java文件
- @param string $dir 要遍历的目录
*/
function processDirectory($dir, $backupDir) {
// 检查目录是否存在
if (!is_dir($dir)) {
echo "目录不存在: $dir\n";
return;
}
// 打开目录
$handle = opendir($dir);
if (!$handle) {
echo "无法打开目录: $dir\n";
return;
}
// 遍历目录中的文件和子目录
while (($file = readdir($handle)) !== false) {
// 跳过.和..
if ($file == '.' || $file == '..') {
continue;
}
$fullPath = $dir . '/' . $file;
// 如果是目录,递归处理
if (is_dir($fullPath)) {
processDirectory($fullPath, $backupDir);
}
// 如果是Java文件,处理它
elseif (pathinfo($fullPath, PATHINFO_EXTENSION) == 'java') {
processJavaFile($fullPath, $backupDir);
}
}
// 关闭目录句柄
closedir($handle);
}
/**
- 处理单个Java文件,移除其中的注释
- @param string $filePath Java文件路径
- @param string $backupDir 备份目录
*/
function processJavaFile($filePath, $backupDir) {
echo "处理文件: $filePath\n";
// 读取文件内容
$content = file_get_contents($filePath);
if ($content === false) {
echo "无法读取文件: $filePath\n";
return;
}
// 创建文件备份
createBackup($filePath, $backupDir, $content);
// 移除注释
$cleanContent = removeJavaComments($content);
// 将处理后的内容写回文件
if (file_put_contents($filePath, $cleanContent) === false) {
echo "无法写入文件: $filePath\n";
} else {
echo "成功处理文件: $filePath\n";
}
}
/**
- 为文件创建备份
- @param string $filePath 原文件路径
- @param string $backupDir 备份目录
- @param string $content 文件内容
*/
function createBackup($filePath, $backupDir, $content) {
// 构建备份文件路径
$relativePath = str_replace(__DIR__, '', $filePath);
$backupFilePath = $backupDir . ltrim($relativePath, '/');
// 创建备份文件所在的目录
$backupFileDir = dirname($backupFilePath);
if (!is_dir($backupFileDir)) {
mkdir($backupFileDir, 0777, true);
}
// 保存备份
if (file_put_contents($backupFilePath, $content) === false) {
echo "无法创建备份文件: $backupFilePath\n";
} else {
echo "已创建备份: $backupFilePath\n";
}
}
/**
- 移除Java代码中的所有注释
- @param string $code Java代码
- @return string 移除注释后的代码
*/
function removeJavaComments($code) {
// 状态标记
$inString = false; // 是否在字符串中
$inChar = false; // 是否在字符常量中
$inLineComment = false; // 是否在单行注释中
$inBlockComment = false; // 是否在多行注释中
$prevChar = ''; // 前一个字符
$result = ''; // 结果字符串
$length = strlen($code);
for ($i = 0; $i < $length; $i++) {
$currentChar = $code[$i];
// 如果不在任何特殊状态中
if (!$inString && !$inChar && !$inLineComment && !$inBlockComment) {
// 检查是否开始单行注释
if ($currentChar == '/' && $i < $length - 1 && $code[$i + 1] == '/') {
$inLineComment = true;
$i++; // 跳过下一个/
}
// 检查是否开始多行注释
elseif ($currentChar == '/' && $i < $length - 1 && $code[$i + 1] == '*') {
$inBlockComment = true;
$i++; // 跳过下一个*
}
// 检查是否开始字符串
elseif ($currentChar == '"' && $prevChar != '\\') {
$inString = true;
$result .= $currentChar;
}
// 检查是否开始字符常量
elseif ($currentChar == "'" && $prevChar != '\\') {
$inChar = true;
$result .= $currentChar;
}
// 普通字符
else {
$result .= $currentChar;
}
}
// 处理单行注释
elseif ($inLineComment) {
// 遇到换行符,结束单行注释
if ($currentChar == "\n") {
$inLineComment = false;
$result .= $currentChar;
}
// 否则忽略该字符
}
// 处理多行注释
elseif ($inBlockComment) {
// 检查是否结束多行注释
if ($currentChar == '*' && $i < $length - 1 && $code[$i + 1] == '/') {
$inBlockComment = false;
$i++; // 跳过下一个/
}
// 否则忽略该字符
}
// 处理字符串
elseif ($inString) {
$result .= $currentChar;
// 检查是否结束字符串(未被转义)
if ($currentChar == '"' && $prevChar != '\\') {
$inString = false;
}
}
// 处理字符常量
elseif ($inChar) {
$result .= $currentChar;
// 检查是否结束字符常量(未被转义)
if ($currentChar == "'" && $prevChar != '\\') {
$inChar = false;
}
}
$prevChar = $currentChar;
}
return $result;
}
// 从当前目录开始处理
processDirectory(__DIR__, $backupDir);
echo "处理完成!\n";
?>
适用场景是什么?项目交付什么的。
评论0
暂时没有评论