package test;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
public class CopyJava {
public static void main(String[] args) throws IOException {
copy("E:/project/aa/src", "E:/project/aa/desc"); // 这里写好源文件夹和目的文件夹
}
private static void copy(String srcPath, String descPath) throws IOException {
copy(new File(srcPath), new File(descPath));
}
private static void copy(File srcFile, File descFile) throws IOException {
if (srcFile.isFile()) { // 文件
File parent = descFile.getParentFile();
if (!parent.exists()) {
parent.mkdirs(); // 创建文件夹
}
if (srcFile.getName().endsWith(".java")) {
copyJava(srcFile, descFile);
} else {
copyFile(srcFile, descFile);
}
} else { // 文件夹
for (File file : srcFile.listFiles()) {
// 相对路径
String srcPath = file.getAbsolutePath().substring(srcFile.getAbsolutePath().length());
copy(file, new File(descFile.getAbsolutePath() + srcPath));
}
}
}
private static void copyJava(File srcFile, File descFile) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(descFile)));
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(srcFile)));
String line;
while ((line = br.readLine()) != null) {
bw.write(line.replaceFirst(".*/\\*(.*)\\*/ ", "")); // 注意这里,如果不行,要适当修改
bw.write("\n");
}
br.close();
bw.close();
}
private static void copyFile(File srcFile, File descFile) throws IOException {
OutputStream output = new FileOutputStream(descFile);
InputStream input = new FileInputStream(srcFile);
byte[] buffer = new byte[1024 * 4];
int n = 0;
while ((n = input.read(buffer)) != -1) {
output.write(buffer, 0, n);
}
input.close();
output.close();
}
}
分享到:
相关推荐
根据给定文件的信息,本文将围绕“使用状态机去除C语言程序中的注释”这一主题进行深入探讨。本文首先会介绍状态机的基本概念及其在去除注释中的应用,随后通过分析给定代码来理解其实现原理及过程。 ### 状态机的...
5. **结束循环**:当没有更多字符可读时,结束循环,输出处理后的代码。 DFA的优点在于其确定性和效率。由于只有一个确定的下一步,DFA的运行时间是线性的,且不会陷入无限循环。此外,DFA的构建可以通过图形化工具...
本文档主要关注的是编译过程的第一步:去除C语言源代码中的注释。注释在源代码中起到解释和说明的作用,但它们在编译成可执行程序时是不必要的。以下是对这一过程的详细说明: 1. **源代码结构**: C语言源代码...
词法分析是编译的第一步,它读取源程序的字符流,识别出单词符号,如标识符、关键字、运算符、常量等,并去除空白和注释。词法分析程序通常采用有限状态自动机来实现,确保输入的字符序列符合预定的词法规则。 语法...
3. 过滤无用信息:去除空格、回车和注释,只保留有意义的符号。 4. 错误处理与符号管理:当遇到错误或需要特殊处理的情况时,调用相应的程序。 四、词法分析程序设计 本实验基于原有的TEST语言词法分析程序进行改造...
**词法分析**:是编译过程的第一步,主要任务是从源代码中识别出一个个具有独立意义的基本单位——记号(Token),并去掉源程序中的空格和注释等无用信息。常用的词法分析器生成工具包括Lex、Flex等。 **语法分析**:...
这个过程中需要去除空白和注释,并识别出程序中的语法结构单元。 2. 语法分析(Syntax Analysis):语法分析器根据语言的语法规则将标记序列组织成抽象语法树(Abstract Syntax Tree, AST)。这一步骤检查程序是否...
此外,学生还能体会到编译原理中的关键步骤,包括去除不必要的字符、转换字符格式以及处理续行和注释等。这样的实践有助于加深对编译原理的理解,为将来学习更复杂的编译技术打下坚实基础。实验报告的撰写和提交也是...
优化可以在不改变程序语义的前提下进行,包括去除冗余代码、优化循环结构、提升变量等。根据优化的时机和位置,可以分为编译时优化和运行时优化。 最后的目标代码生成阶段负责将优化后的中间代码转换成特定机器的...
词法分析器,也被称为扫描器或词法解析器,其主要任务是从源代码中识别出一个个有意义的符号,如关键字、标识符、运算符、常量等,并去除无意义的空白字符和注释。这是编译过程的第一步,为后续的语法分析做准备。 ...
这一阶段的主要任务包括去除注释、忽略空格、识别字符串和数字常量等。 ### 语法分析 语法分析(也称为解析)是在词法分析之后进行的,它的主要作用是验证源代码是否符合所使用的编程语言的语法规则。语法分析器...
发送方将数据看作是一个二进制多项式,然后用一个预定义的固定长度的二进制多项式(称为生成多项式)去除这个数据多项式。如果除法的结果没有余数,那么数据就是有效的;如果有余数,则说明数据在传输过程中可能发生...
在编译原理的学习中,实验是理解理论并实践的关键环节。本实验的焦点在于PL(Programming Language,一种简化版的编程语言)的扩展,目的是帮助学生深入理解编译器的工作原理,以及如何对语言进行语法和语义的增强。...
3. **词法分析**:利用正则表达式和有限自动机(DFA和NFA)进行符号识别,去除源代码中的空白、注释,并将源码分解成有意义的单元——记号(Token)。 4. **语法分析**:主要涉及文法的概念,如上下文无关文法,...
如果遇到注释(以"//"开头的行),则去掉注释部分并替换所有的制表符和换行符为空格,同时将所有字符转为小写,然后将处理后的字符串写入到`result1.txt`文件,并打印到控制台。 这个简单的词法分析器并未实现完整...
2. **直接运行**:这意味着源代码已经过调试,可以直接在合适的环境中(如IDE或命令行)编译并执行,无需额外的设置或配置。 结合【标签】"小学期就靠这个了",我们可以推测这个项目可能适合初学者,作为学习编程或...
2. 预处理:`Void pretreatment(string line)`,处理输入的源代码,去除多余的空格,方便后续分析。 3. 字符检测:`int check(char x)`,检查字符类型,如标识符、数字、运算符等,并将其映射为相应的整数值。 4. ...