Как сделать файл class

Добавил пользователь Владимир З.
Обновлено: 10.09.2024

Создание нового файла в Java не такое уж сложное дело. Эта статья поможет новичкам научиться, как создать и записать новый файл в Java.

Сначала научимся, как создать новые файлы в Java.

Есть много способов для этого, но в этой статье мы расскажем о трех способах создания файла.

Используйте класс java.io.File

При установлении объекта File вы указываете название файла и дальше используйте метод createNewFile(), который атомарно создает новый пустой файл с названием абстрактного пути, но только в случае, если файл с таким названием не существует.

Данный метод возвращает true, если названный файл не существует и был успешно создан. Возвращает false, если файл существует. Он также создает java.io.IOException, когда не может создать файл. Созданный файл пуст и имеет нулевой байт.

Данный метод не должен быть использован для блокировки файлов, так как протокол, созданный в результате этого, не может надежно работать.

Запомните, что этот метод только создает файл, но не записывает к нему контент.

Пример

Когда закончите и запустите программу, результат будет иметь следующий вид:

Результат

2. Используйте класс java.io.FileOutputStream

Если хотите создать новый файл и одновременно записать какую-нибудь информацию в нем, можете использовать метод FileOutputStream.write. Этот метод автоматически создает новый файл и записывает в нем контент.

Метод FileOutputStream используется для записи байтов в файл. Если хотите записать символьно-ориентированную информацию, будет лучше использовать FileWriter.

Смотрите использование кода:

Пример

3. Используйте Java NIO Files.write()

Используйте класс Java NIO Files для создания нового файла и записи информации в нем. Этот Java класс представляет метод write(Path path, byte[] bytes, OpenOption… options), который записывает байты к файлу по указанному пути.

С использованием класса Files возможно создавать, перемещать, копировать, удалять файлы и каталоги. Он также может быть использован для записи и чтения файла.

Files.write() - это рекомендуемый способ создания файла, так как вам не придется беспокоиться о закрытии ресурсов IO.

Этот класс имеет следующие параметры:

  • lines - объект для реализования последовательности символов. Запишите строки текста к файлу. Каждая строка - это последовательность символов и записывается к файлу поочередно. Каждая строка заканчивается разделителем строки платформы.
  • options - Этот параметр указывает, как создается или открывается файл. Если никакой параметр не указан, по умолчанию будут выбраны параметры CREATE, TRUNCATE_EXISTING and WRITE. Это означает, что он открывает файл для записи и создает файл, если он не существует, или размер файла доводит до 0, если файл существует.
  • path - Указывает путь.
  • cs - Набор символов, используемый для кодировки

All the bytes in byte array are written to the file. This method ensures that the file is closed when all the bytes have been written and returns the path of written file.

На этом уроке мы рассмотрим работу классов с заголовочными файлами в языке С++.

Отделение объявления от реализации

Все классы, которые мы использовали до сих пор, были достаточно простыми, поэтому мы записывали методы непосредственно внутри тела классов, например:

Вот наш класс Date с конструктором Date() и методом setDate(), определенными вне тела класса. Обратите внимание, прототипы этих функций все еще находятся внутри тела класса, но их фактическая реализация находится за его пределами:

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

Вот еще один пример класса с конструктором, определенным извне, со списком инициализации членов:

Классы и заголовочные файлы

На уроке о заголовочных файлах в языке С++ мы узнали, что объявления функций можно поместить в заголовочные файлы, чтобы затем иметь возможность использовать эти функции в нескольких файлах или даже в нескольких проектах. Классы в этом плане ничем не отличаются от функций. Определения классов могут быть помещены в заголовочные файлы для облегчения их повторного использования в нескольких файлах или проектах. Обычно, определение класса помещается в заголовочный файл с тем же именем, что у класса, а методы, определенные вне тела класса, помещаются в файл .cpp с тем же именем, что у класса.

Вот наш класс Date, но уже разбитый на файлы .cpp и .h:

Нет. Классы — это пользовательские типы данных, которые освобождаются от определения только в одном месте. Поэтому класс, определенный в заголовочном файле, можно свободно подключать в другие файлы.

Методы, определенные внутри тела класса, считаются неявно встроенными. Встроенные функции освобождаются от правила одного определения. А это означает, что проблем с определением простых методов (таких как функции доступа) внутри самого класса возникать не должно.

Методы, определенные вне тела класса, рассматриваются, как обычные функции, и подчиняются правилу одного определения, поэтому эти функции должны быть определены в файле .cpp, а не внутри .h. Единственным исключением являются шаблоны функций (но об этом чуть позже).

Параметры по умолчанию

Параметры по умолчанию для методов должны быть объявлены в теле класса (в заголовочном файле), где они будут видны всем, кто подключает этот заголовочный файл с классом.

Библиотеки

Разделение объявления класса и его реализации очень распространено в библиотеках, которые используются для расширения возможностей вашей программы. Вы также подключали такие заголовочные файлы из Стандартной библиотеки С++, как iostream, string, vector, array и другие. Обратите внимание, вы не добавляли iostream.cpp, string.cpp, vector.cpp или array.cpp в ваши проекты. Ваша программа нуждается только в объявлениях из заголовочных файлов, чтобы компилятор смог проверить корректность вашего кода в соответствии с правилами синтаксиса языка C++. Однако реализации классов, находящихся в Стандартной библиотеке С++, содержатся в предварительно скомпилированном файле, который добавляется на этапе линкинга. Вы нигде не встречаете этот код.

Вне программ с открытым исходным кодом (где предоставляются оба файла: .h и .cpp), большинство сторонних библиотек предоставляют только заголовочные файлы вместе с предварительно скомпилированным файлом библиотеки. На это есть несколько причин:

На этапе линкинга быстрее будет подключить предварительно скомпилированную библиотеку, чем выполнять перекомпиляцию каждый раз, когда она нужна.

Наличие собственных файлов, разделенных на объявление (файлы .h) и реализацию (файлы .cpp), является не только хорошей формой содержания кода, но и упрощает создание собственных пользовательских библиотек.

Заключение

Возможно, у вас возникнет соблазн поместить все определения методов класса в заголовочный файл внутри тела класса. Хотя это скомпилируется, но здесь есть несколько нюансов:

Во-первых, как упоминалось выше, это приведет к загромождению определения вашего класса.

Поэтому рекомендуется следующее:

Классы, используемые только в одном файле, и которые повторно не используются, определяйте непосредственно в файле .cpp, где они используются.

Классы, используемые в нескольких файлах или предназначенные для повторного использования, определяйте в заголовочном файле с тем же именем, что у класса.

Тривиальные методы (обычные конструкторы или деструкторы, функции доступа и т.д.) определяйте внутри тела класса.

Нетривиальные методы определяйте в файле .cpp с тем же именем, что у класса.

На следующих уроках большинство наших классов будут определены в файле .cpp со всеми методами, реализованными непосредственно в теле класса. Это делается для удобства и лаконичности примеров. В реальных проектах лучше, когда классы помещаются в отдельные файлы .cpp и .h.

Обработка файлов в Java необходима для выполнения различных задач, таких как создание, чтение, запись и т. д. В этой статье я расскажу вам, как создать файл в Java с использованием различных методов.

Одна из главных причин популярности Java – независимость от платформы. Java по-прежнему является актуальным языком программирования, который не имеет признаков снижения популярности, и поэтому его стоит изучать. Большинство разработчиков выбирают его как свой первый язык программирования, потому что его легко выучить.

Поток выполнения Java-программы

Выполнение программы Java

Все языки программирования высокого уровня (также называемые третьим поколением) позволяют писать программы на языке, аналогичном (хотя и гораздо более простом), чем естественный язык. Программа высокого уровня называется исходным кодом.

Что такое файл в Java?

Файл – это не что иное, как простое хранилище данных на языке Java. Файловая система может реализовывать ограничения для определенных операций, таких как чтение, запись и выполнение. Эти ограничения известны как права доступа.

При чтении файла в Java мы должны знать класс файлов Java. Класс Java File представляет файлы и имена каталогов в абстрактной манере. Класс File имеет несколько методов для работы с каталогами и файлами, таких как создание новых каталогов или файлов, удаление и переименование каталогов или файлов и т. д. Объект File представляет фактический файл / каталог на диске.

Теперь давайте разберемся с различными методами создания файла.

Методы для создания файла в Java

1. Создайте файл с классом java.io.File

Вам нужно использовать метод File.createNewFile(). Этот метод возвращает логическое значение:

  • истина, если файл выполнен.
  • false, если файл уже существует или операция по какой-то причине не открывается.

Этот метод также генерирует исключение java.io.IOException, когда он не может создать файл.

Когда мы создаем объект File, передавая имя файла, он может быть с абсолютным путем, или мы можем предоставить только имя файла, или мы можем предоставить относительный путь. Для неабсолютного пути объект File пытается найти файлы в корневом каталоге проекта.

Если мы запустим программу из командной строки, для неабсолютного пути объект File попытается найти файлы из текущего каталога. Экземпляры класса File являются неизменяемыми; то есть, после создания абстрактный путь, представленный объектом File, никогда не изменится.

Теперь давайте рассмотрим небольшой пример и разберемся, как он работает.

Пожалуйста, обратите внимание, что этот метод будет только создавать файл, но не записывать в него никакого содержимого. Теперь давайте двигаться дальше и рассмотрим следующий метод.

2. Создайте файл с классом java.io.FileOutputStream

Если вы хотите создать новый файл и в то же время, если хотите записать в него некоторые данные, вы можете использовать метод записи FileOutputStream. В Java FileOutputStream является классом потока байтов. Чтобы записать данные в файл, вы должны преобразовать данные в байты, а затем сохранить их в файл.

Класс FileOutputStream хранит данные в виде отдельных байтов. Может использоваться для создания текстовых файлов. Файл представляет собой хранилище данных на втором носителе, таком как жесткий диск или компакт-диск. Метод FileOutputStream.write() автоматически создает новый файл и записывает в него содержимое.

3. Создайте файл с помощью Java.nio.file.Files – Java NIO

Files.write() – лучший способ создать файл, и он должен быть вашим предпочтительным подходом в будущем, если вы его еще не используете. Это хороший вариант, потому что нам не нужно беспокоиться о закрытии ресурсов ввода-вывода. Каждая строка представляет собой последовательность символов и записывается в файл последовательно, каждая строка заканчивается разделителем строк платформы.

public static Path createFile(Path path, FileAttribute . attrs) throws IOException

Создает новый и пустой файл, и если файл уже существует, то будет ошибка.

путь – путь для создания файла.

attrs – необязательный список атрибутов файла, устанавливаемых атомарно при создании.

Далее, давайте посмотрим на создание временного файла.

4. Java также может создавать временные файлы

Создание временного файла в java может потребоваться во многих сценариях, но в основном это происходит во время модульных тестов, где вы не хотите сохранять результаты. Как только тестовый пример закончен, вас не волнует содержимое файла.

Создание временного файла с использованием java.io.File.createTempFile()

с использованием NIO

Для создания временного файла используются следующие два метода.

1. createTempFile(Path, String, String, FileAttribute … attrs) – создает файл tmp в указанном каталоге.

Вышеуказанный метод принимает четыре аргумента.

Путь -> указать каталог, в котором будет создан файл.

Строка -> чтобы упомянуть префикс имени файла. Используйте ноль, чтобы избежать префикса.

Строка -> чтобы упомянуть суффикс имени файла. т.е. расширение файла. Используйте null, чтобы использовать .tmp в качестве расширения.

attrs -> Это необязательно, чтобы упоминать список атрибутов файла, чтобы установить атомарно при создании файла

Например. Files.createTempFile(path,null, null); – создает временный файл с расширением .tmp по указанному пути

2. createTempFile(String, String, FileAttribute ) – создает временный файл во временном каталоге по умолчанию системы / сервера.

Я хочу изменить метод файла .class. Я установил JD Eclipse Decompiler и открыл файл .class. Я добавил несколько кодов и сохранил файл .class. Но, файл .class не меняется.

Я не знаю, как использовать декомпилятор. И если это возможно, как изменить файл .class без использования декомпилятора.

Я использую Ubuntu.

Вот мой декомпилированный код:

Вы можете выполнить следующие шаги, чтобы изменить свой класс Java:

  1. Декомпилируйте файл .class, как вы это сделали, и сохраните его как .java
  2. Создайте проект в Eclipse с этим Java-файлом, оригинальным JAR как библиотека и все ее зависимости
  3. Измените .java и скомпилируйте
  4. Получите измененный файл .class и поместите его снова в исходный JAR.

Используйте редактор байт-кода, например:

Будьте осторожны, потому что вам нужно очень хорошее знание байт-кода Java.

Вы также можете изменить класс во время выполнения с помощью переплетения байт-кода (например, AspectJ).

Я добавил несколько кодов и сохранил файл .class.

В JD EClipse Decompiler вы видите декомпилированное представление байтового кода в файле .class. Даже если вы измените текст, это не повлияет на байт-код.

когда вы декомпилируете и изменяете код, вам нужно перейти в корневую папку вашего проекта eclipse и проверить свой класс в папке bin, который находится на том же уровне, что и src. затем откройте исходную банку с помощью инструмента zip ( 7zip подходит для этого) и поместите измененный класс в та же упаковка внутри банки.

Используйте библиотеку Java java assist для управления байт-кодом Java (файл .class) приложения.

- > Spring, Hibernate, EJB, использующий это для реализации прокси

- > мы можем манипулировать байт-кодом, чтобы выполнить некоторый программный анализ

- > мы можем использовать Javassist для реализации прозрачного кэша для возвращаемых значений метода, перехватывая все вызовы метода и делегируя только супер реализации при первом вызове.

Вы можете изменить код при декомпиляции, но его нужно перекомпилировать в файл class , декомпилятор выводит java , этот код должен быть перекомпилирован с тем же путем к классам, что и исходный jar / class файл

Насколько мне удалось выяснить, простого способа сделать это не существует. Самый простой способ - на самом деле не преобразовать файл класса в исполняемый файл, а обернуть исполняемый модуль запуска вокруг файла класса. То есть создайте исполняемый файл (возможно, исполняемый файл сценариев для ОС), который просто вызывает класс Java через командную строку.

Если вы хотите, чтобы на самом деле была программа, которая это делает, вам стоит взглянуть на некоторые из автоматических установщиков.

Вот способ, который я нашел:

Вы можете использовать любой декомпилятор, чтобы сначала декомпилировать файл.

Однажды я столкнулся с подобной проблемой, когда у меня не было исходного кода приложения, и мне пришлось внести очень небольшое изменение в файл.

Извлеченный файл класса из банки

Открыл его в декомпиляторе (я использую JD GUI, вы можете легко получить его из многих ресурсов в интернете) Вы можете скачать его с здесь

Вы можете просмотреть все файлы в банке с помощью графического интерфейса JD.

Иногда нам нужно собрать один файл из тысячи файлов, чтобы решить проблему. В таком случае можно создать такую же структуру папок, как путь к классу, декомпилировать файл в java или скопировать файл java из исходного кода. Внесите необходимые изменения, скомпилируйте один конкретный файл в класс со всеми зависимостями /классами и, наконец, замените файл класса. Наконец перезапустите контейнер. После того, как война взорвана, файл не будет заменен.

Похожие вопросы

Популярные теги

Читайте также: