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

如何通过Java代码更改包信息?,java,Java,在我当前的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”复制

在我当前的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.impl”时,是否有任何方法(通过java代码,而不是手动)更改头中的包信息。”

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

  • 打开源文件
  • 打开目标文件
  • 将所有内容从源复制到目标,直到看到
    关键字
  • 将包关键字复制到目标文件中
  • 将“correct”包位置写入目标文件
  • 跳过源文件中的“错误”包位置
  • 将源文件中的剩余内容写入目标文件
  • 请注意,这将正确地“重新设置”文件包的基址;但它不会“重新设置”预期在“旧”包中找到该文件的其他文件的基址。要修复这些其他文件(如果存在,可能是您的项目设计为没有这么多引用,或者您打算复制所有文件),您需要打开项目中的每个文件,在
    import
    语句中查找“moved”类。如果找到它,则不需要复制导入,而是以正确的替换方式进行复制

    当处理一个没有真正“移动”但需要更改的文件时,最好的策略是编写一个临时文件,然后在临时文件完全写入后用临时文件替换原始文件。如下所示:

    (reading) MyClass.java
    (writing) .tempMyClass.java
    (done writing)
    (moving)  .tempMyClass.java to MyClass.java
    
    这使您不受许多讨厌的项目的限制,例如在需要读取的文件中写入内容(这将在读取之前销毁所需的信息)

    java.io
    和类
    java.lang.String
    具有所有实用程序,可以让您编写这些工具,但要详细说明这篇文章太长了。试着写一点,在web上搜索(如何使用java读取文件中的行,如何使用java将行写入文件中)当你陷入困境时,发布代码说明你已经走了多远,以及你的具体错误或误解,很多人都会乐意帮助你


    如果要对已编译的文件执行此操作,则需要读取java类文件格式的一些信息,并找到类名常量字符串,然后通过上面类似的过程对其进行更改(除了写入二进制字节),或者可以使用类似ASM的库来执行上面相同的过程(但也许可以避免手工操作时可能出现的错误)。

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

  • 打开源文件
  • 打开目标文件
  • 将所有内容从源复制到目标,直到看到
    关键字
  • 将包关键字复制到目标文件中
  • 将“correct”包位置写入目标文件
  • 跳过源文件中的“错误”包位置
  • 将源文件中的剩余内容写入目标文件
  • 请注意,这将正确地“重新设置”文件包的基址;但它不会“重新设置”预期在“旧”包中找到该文件的其他文件的基址。要修复这些其他文件(如果存在,可能是您的项目设计为没有这么多引用,或者您打算复制所有文件),您需要打开项目中的每个文件,在
    import
    语句中查找“moved”类。如果找到它,则不需要复制导入,而是以正确的替换方式进行复制

    当处理一个没有真正“移动”但需要更改的文件时,最好的策略是编写一个临时文件,然后在临时文件完全写入后用临时文件替换原始文件。如下所示:

    (reading) MyClass.java
    (writing) .tempMyClass.java
    (done writing)
    (moving)  .tempMyClass.java to MyClass.java
    
    这使您不受许多讨厌的项目的限制,例如在需要读取的文件中写入内容(这将在读取之前销毁所需的信息)

    java.io
    和类
    java.lang.String
    具有所有实用程序,可以让您编写这些工具,但要详细说明这篇文章太长了。试着写一点,在web上搜索(如何使用java读取文件中的行,如何使用java将行写入文件中)当你陷入困境时,发布代码说明你已经走了多远,以及你的具体错误或误解,很多人都会乐意帮助你


    如果要对已编译的文件执行此操作,则需要读取java类文件格式的一些信息,并找到类名常量字符串,然后通过上面类似的过程对其进行更改(除了写入二进制字节),或者可以使用类似ASM的库来执行上面相同的过程(但也许可以省去手工操作时可能犯的错误)。

    你可以通过大量的努力做到这一点

  • 解析java文件,并更新它们(这不容易,只考虑在注释或字符串中有“代码>包< /COD>单词”)。
  • 您应该更新引用它们的所有类(这更难,因为您应该更改导入语句,更改完全限定的类名,并将导入语句添加到同一个包中的类中(因为它们是邻居,没有导入语句)
  • 我建议您使用和IDE(如Eclipse、Netbeans或IDEA)并使用其重构功能。