在Java中,有没有办法在不导入类的情况下编写文件(例如java.io
)。我知道一种方法是做这样的事情:
Runtime.getRuntime().exec("echo 'test' > test.txt ")
我正在寻找其他方法来实现类似的结果。
答案 0 :(得分:3)
在Java中,有没有办法在不导入类的情况下编写文件(例如java.io)
不,没有。在Java中,import
语句只是Java编译器解析非String
或Runtime
等非限定名称的快捷方式,因此您无需完全限定所有名称。源代码 - 编译完成后,在.class
文件中,只有包含包名的完全限定引用。
即便是你的例子
Runtime.getRuntime().exec("echo 'test' > test.txt ")
将成为
java.lang.Runtime.getRuntime().exec("echo 'test' > test.txt ")
在.class
文件中:
$ javap -c Sample.class
...
public static void main(java.lang.String[]) throws java.io.IOException;
Code:
0: invokestatic #19 // Method java/lang/Runtime.getRuntime:()Ljava/lang/Runtime;
3: ldc #25 // String echo 'test' > test.txt
5: invokevirtual #27 // Method java/lang/Runtime.exec:(Ljava/lang/String;)Ljava/lang/Process;
8: pop
9: return
答案 1 :(得分:1)
这个命题很荒谬。在没有使用[insert here here]为此目的提供的工具的情况下,询问如何在[在此处插入语言]中执行某些操作是没有意义的。
特别是在Java中,您可以在不依赖标准库的情况下执行 nothing 。我们甚至无法使用至少一个ClassLoader
以及ClassLoader
所依赖的每个班级来加载您的课程,包括java.lang.String
,java.util.Locale
,{{1和其他许多人。您没有在代码中明确引用这些并不意味着您的程序不依赖它们。
此外,它没有为您提供任何有用的功能,以避免Java代码中的java.io.InputStream
语句,因为它们没有运行时表现形式:它们纯粹以方便程序员。