为什么用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";
?>

适用场景是什么?项目交付什么的。