在我目前的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“时,有没有办法在标题中更改包信息(通过java代码,而不是手动)。 inria.arles.pankesh.impl”。
答案 0 :(得分:3)
如果您复制java源文件,则需要
package
关键字。请注意,这将正确“重新绑定”文件的包;但它不会“修改”其他可能希望在“旧”包中找到该文件的文件。要修复那些其他文件(如果它们存在,也许你的项目设计得没有那么多的引用,或者你打算复制所有文件),你需要打开项目中的每个文件,寻找“移动”类。一个import
声明。如果找到它,则需要不复制导入,但要复制正确的替换。
当处理一个并非真正“移动”但需要更改的文件时,最好的策略是编写一个临时文件,然后在完全写入临时文件后用临时文件替换原始文件。像这样:
(reading) MyClass.java
(writing) .tempMyClass.java
(done writing)
(moving) .tempMyClass.java to MyClass.java
这使您不会受到许多令人讨厌的项目的限制,例如在文件中写入您需要读取的文件(在您阅读之前会破坏您需要的信息)。
包java.io
和类java.lang.String
具有允许您编写这些工具的所有实用程序,但是详细介绍将会发布太长的帖子。尝试写一点,搜索网页(如何用java读取文件中的行,如何用java编写行文件),发布代码,了解你已经获得了多少以及你的具体内容错误或误解,很多人会很乐意提供帮助。
如果你想对已编译的文件执行此操作,则需要读取一下java类文件格式,并找到类名常量字符串,并通过上面的类似过程进行更改(除了你将写二进制字节),或者你可以使用像ASM这样的库来执行与上面相同的程序(但也许可以省去你手工完成时可能犯的错误。)
答案 1 :(得分:1)
你可以付出很多努力,
package
字的时间)。 我建议您使用IDE(例如Eclipse,Netbeans或IDEA)并使用其重构功能。