gpt4 book ai didi

java - 如何通过Java代码更改包信息?

转载 作者:行者123 更新时间:2023-12-01 19:06:04 26 4
gpt4 key购买 nike

在我当前的 Java 项目中,我编写了一个 Java 程序,它将一些 Java 文件从包“fr.inria.arles.pankesh.gen”复制到包“fr.inria.arles.pankesh.impl”。

将 Java 文件从包“fr.inria.arles.pankesh.gen”复制到包“fr.inria.arles.pankesh.impl”后,由于 Java 文件的包信息更改,我的 java 文件出现错误。

我的问题是“当我的程序将Java文件从包“fr.inria.arles.pankesh.gen”复制到包“fr.inria.arles.pankesh.gen”时,有什么方法可以更改 header 中的包信息(通过java代码,而不是手动)。 inria.arles.pankesh.impl”。

最佳答案

如果复制java源文件,则需要

  1. 打开源文件。
  2. 打开目标文件。
  3. 将所有内容从源复制到目标,直到看到 package 关键字。
  4. 将包关键字复制到目标文件中。
  5. 将“正确”的包位置写入目标文件
  6. 跳过源文件中“不正确”的包位置
  7. 将源文件的剩余内容写入目标文件。

请注意,这将正确地“ rebase ”文件的包;但它不会对可能希望在“旧”包中找到该文件的其他文件进行“ rebase ”。要修复这些其他文件(如果存在,也许您的项目设计为没有那么多引用,或者您打算复制所有文件),您需要打开项目中的每个文件,查找“已移动”类import 语句。如果找到它,则需要复制导入内容,而是复制正确的替换内容。

当处理一个并不真正“移动”但需要更改的文件时,最好的策略是写入一个临时文件,然后在临时文件完全写入后用临时文件替换原始文件。就像这样:

(reading) MyClass.java
(writing) .tempMyClass.java
(done writing)
(moving) .tempMyClass.java to MyClass.java

这使您不会受到许多令人讨厌的项目的限制,例如在文件中写入超出您需要读取的位置(这会在您读取之前破坏您需要的信息)。

java.io和类java.lang.String拥有允许您编写这些工具的所有实用程序,但详细介绍会很远帖子太长了。尝试写一点,在网络上搜索(如何使用 java 从文件中读取行,如何使用 java 将行写入文件),当你遇到困难时,发布代码以了解你已经走了多远以及你的具体情况错误或误解,很多人会很乐意提供帮助。

如果你想对已经编译的文件执行此操作,你需要阅读一些 java 类文件格式,找到类名常量字符串,并通过上面类似的过程更改它(除非你会写入二进制字节),或者您可以使用像 ASM 这样的库来执行与上面相同的过程(但也许可以避免您手动执行时可能犯的错误)。

关于java - 如何通过Java代码更改包信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10075493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com