2015-11-24 3 views
-2

В Java есть способ записи файла без импорта класса (например, java.io). Я знаю, что один из способов сделать это было бы сделать что-то вроде этого:Запись файлов без использования каких-либо библиотек

Runtime.getRuntime().exec("echo 'test' > test.txt ") 

Я ищу для других методов достижения аналогичных результатов.

+7

Почему так важно не импортировать ничего? Операторы импорта не создают зависимости от библиотек. Они просто позволяют вам опустить имя пакета импортируемых классов. – mhlz

+4

Не импортируйте ничего и полностью квалифицируйте все свои классы. Импорт не требуется (хотя будет более подробный исходный код для создания идентичного скомпилированного кода, если вы просто использовали импорт). –

+3

Ваше требование не имеет смысла, хотя ... –

ответ

3

В Java есть способ записать файл без импорта класса (например java.io)

Нет, нет. В Java оператор import не более чем ярлык для Java Compiler для разрешения неквалифицированных имен, таких как 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 

Смотрите также How java import works.

1

Предложение абсурдно. Нет смысла спрашивать, как сделать что-то в [insert language here], не используя возможности, которые [вставляют язык здесь] обеспечивают для этой цели.

В Java, в частности, вы можете сделать ничего, не полагаясь на стандартную библиотеку. Ваш класс не может быть загружен без использования хотя бы одного ClassLoader и каждого класса, который зависит от рекурсивно, так как java.lang.String, java.util.Locale, java.io.InputStream и многие другие. То, что вы не ссылаетесь на них явно в своем коде, не означает, что ваша программа не полагается на них.

Кроме того, он не получает вам ничего полезного специально, чтобы избежать import заявления в коде Java, как и нет времени выполнения проявления: они чисто для удобства программиста.