Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> java

Java — файлы и ввод-вывод

Пакет java.io содержит почти все классы, которые могут вам когда-либо понадобиться для выполнения операций ввода-вывода (I/O) в Java. Все эти потоки представляют собой источник ввода и пункт назначения вывода. Поток в пакете java.io поддерживает множество данных, таких как примитивы, объекты, локализованные символы и т. д.

Трансляция

Поток можно определить как последовательность данных. Есть два вида потоков —

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

Потоки байтов

Потоки байтов Java используются для ввода и вывода 8-битных байтов. Хотя существует множество классов, связанных с потоками байтов, наиболее часто используемые классы:FileInputStream и FileOutputStream . Ниже приведен пример, в котором эти два класса используются для копирования входного файла в выходной файл —

Пример

import java.io.*;
public class CopyFile {

   public static void main(String args[]) throws IOException {  
      FileInputStream in = null;
      FileOutputStream out = null;

      try {
         in = new FileInputStream("input.txt");
         out = new FileOutputStream("output.txt");
         
         int c;
         while ((c = in.read()) != -1) {
            out.write(c);
         }
      }finally {
         if (in != null) {
            in.close();
         }
         if (out != null) {
            out.close();
         }
      }
   }
}

Теперь у нас есть файл input.txt. со следующим содержанием —

This is test for copy file.

В качестве следующего шага скомпилируйте приведенную выше программу и запустите ее, в результате чего будет создан файл output.txt с тем же содержимым, что и в input.txt. Итак, давайте поместим приведенный выше код в файл CopyFile.java и сделаем следующее —

$javac CopyFile.java
$java CopyFile

Потоки персонажей

Java байт потоки используются для ввода и вывода 8-битных байтов, тогда как Java Character потоки используются для выполнения ввода и вывода для 16-битного юникода. Хотя существует множество классов, связанных с потоками символов, наиболее часто используемые классы:FileReader и FileWriter . Хотя внутренне FileReader использует FileInputStream, а FileWriter использует FileOutputStream, но здесь основное отличие состоит в том, что FileReader считывает два байта за раз, а FileWriter записывает два байта за раз.

Мы можем переписать приведенный выше пример, который использует эти два класса для копирования входного файла (содержащего символы Юникода) в выходной файл —

Пример

import java.io.*;
public class CopyFile {

   public static void main(String args[]) throws IOException {
      FileReader in = null;
      FileWriter out = null;

      try {
         in = new FileReader("input.txt");
         out = new FileWriter("output.txt");
         
         int c;
         while ((c = in.read()) != -1) {
            out.write(c);
         }
      }finally {
         if (in != null) {
            in.close();
         }
         if (out != null) {
            out.close();
         }
      }
   }
}

Теперь у нас есть файл input.txt. со следующим содержанием —

This is test for copy file.

В качестве следующего шага скомпилируйте приведенную выше программу и запустите ее, в результате чего будет создан файл output.txt с тем же содержимым, что и в input.txt. Итак, давайте поместим приведенный выше код в файл CopyFile.java и сделаем следующее —

$javac CopyFile.java
$java CopyFile

Стандартные потоки

Все языки программирования обеспечивают поддержку стандартного ввода-вывода, когда пользовательская программа может вводить данные с клавиатуры, а затем выводить их на экран компьютера. Если вы знакомы с C или C++; языков программирования, то вы должны знать о трех стандартных устройствах STDIN, STDOUT и STDERR. Точно так же Java предоставляет следующие три стандартных потока —

Ниже приведена простая программа, которая создает InputStreamReader. для чтения стандартного потока ввода, пока пользователь не введет «q» —

Пример

Живая демонстрация
import java.io.*;
public class ReadConsole {

   public static void main(String args[]) throws IOException {
      InputStreamReader cin = null;

      try {
         cin = new InputStreamReader(System.in);
         System.out.println("Enter characters, 'q' to quit.");
         char c;
         do {
            c = (char) cin.read();
            System.out.print(c);
         } while(c != 'q');
      }finally {
         if (cin != null) {
            cin.close();
         }
      }
   }
}

Давайте сохраним приведенный выше код в файле ReadConsole.java и попробуем скомпилировать и выполнить его, как показано в следующей программе. Эта программа продолжает читать и выводить один и тот же символ, пока мы не нажмем 'q' -

$javac ReadConsole.java
$java ReadConsole
Enter characters, 'q' to quit.
1
1
e
e
q
q

Чтение и запись файлов

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

Вот иерархия классов для обработки входных и выходных потоков.

Двумя важными потоками являются FileInputStream. и FileOutputStream , которые будут обсуждаться в этом руководстве.

FileInputStream

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

Следующий конструктор принимает имя файла в виде строки для создания объекта входного потока для чтения файла —

InputStream f = new FileInputStream("C:/java/hello");

Следующий конструктор принимает файловый объект для создания объекта входного потока для чтения файла. Сначала мы создаем файловый объект, используя метод File () следующим образом —

File f = new File("C:/java/hello");
InputStream f = new FileInputStream(f);

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

<тд>

public void close() вызывает исключение IOException{}

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

<тд>

защищенный void finalize() выдает исключение IOException {}

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

<тд>

public int read(int r) генерирует IOException{}

Этот метод считывает указанный байт данных из InputStream. Возвращает целое число. Возвращает следующий байт данных и -1 будет возвращено, если это конец файла.

<тд>

public int read(byte[] r) выдает исключение IOException{}

Этот метод считывает байты r.length из входного потока в массив. Возвращает общее количество прочитанных байтов. Если это конец файла, будет возвращено -1.

<тд>

public int available() вызывает исключение IOException{}

Дает количество байтов, которые можно прочитать из этого входного потока файла. Возвращает целое число.

Сер.№ Метод и описание
1
2
3
4
5

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

ФайлВыходнойПоток

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

Вот два конструктора, которые можно использовать для создания объекта FileOutputStream.

Следующий конструктор принимает имя файла в виде строки для создания объекта входного потока для записи файла —

OutputStream f = new FileOutputStream("C:/java/hello") 

Следующий конструктор принимает файловый объект для создания объекта выходного потока для записи файла. Во-первых, мы создаем файловый объект, используя метод File () следующим образом —

File f = new File("C:/java/hello");
OutputStream f = new FileOutputStream(f);

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

<тд>

public void close() вызывает исключение IOException{}

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

<тд>

защищенный void finalize() выдает исключение IOException {}

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

<тд>

public void write(int w) генерирует исключение IOException{}

Этот метод записывает указанный байт в выходной поток.

<тд>

public void write(byte[] w)

Записывает байты w.length из указанного массива байтов в OutputStream.

Сер.№ Метод и описание
1
2
3
4

Доступны и другие важные потоки вывода, для получения более подробной информации вы можете обратиться к следующим ссылкам —

Пример

Ниже приведен пример демонстрации InputStream и OutputStream —

import java.io.*;
public class fileStreamTest {

   public static void main(String args[]) {
   
      try {
         byte bWrite [] = {11,21,3,40,5};
         OutputStream os = new FileOutputStream("test.txt");
         for(int x = 0; x < bWrite.length ; x++) {
            os.write( bWrite[x] );   // writes the bytes
         }
         os.close();
     
         InputStream is = new FileInputStream("test.txt");
         int size = is.available();

         for(int i = 0; i < size; i++) {
            System.out.print((char)is.read() + "  ");
         }
         is.close();
      } catch (IOException e) {
         System.out.print("Exception");
      }	
   }
}

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

Навигация по файлам и ввод-вывод

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

Каталоги в Java

Каталог — это файл, который может содержать список других файлов и каталогов. Вы используете Файл объект для создания каталогов, чтобы перечислить файлы, доступные в каталоге. Для получения полной информации просмотрите список всех методов, которые вы можете вызывать для объекта File и которые связаны с каталогами.

Создание каталогов

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

В следующем примере создается каталог «/tmp/user/java/bin» —

Пример

import java.io.File;
public class CreateDir {

   public static void main(String args[]) {
      String dirname = "/tmp/user/java/bin";
      File d = new File(dirname);
      
      // Create directory now.
      d.mkdirs();
   }
}

Скомпилируйте и выполните приведенный выше код, чтобы создать «/tmp/user/java/bin».

Примечание − Java автоматически использует разделители путей в UNIX и Windows в соответствии с соглашениями. Если вы используете косую черту (/) в версии Java для Windows, путь все равно будет корректно разрешаться.

Список каталогов

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

Пример

import java.io.File;
public class ReadDir {

   public static void main(String[] args) {
      File file = null;
      String[] paths;
  
      try {      
         // create new file object
         file = new File("/tmp");

         // array of files and directory
         paths = file.list();

         // for each name in the path array
         for(String path:paths) {
            // prints filename and directory name
            System.out.println(path);
         }
      } catch (Exception e) {
         // if any error occurs
         e.printStackTrace();
      }
   }
}

Это даст следующий результат на основе каталогов и файлов, доступных в вашем /tmp каталог —

Вывод

test1.txt
test2.txt
ReadDir.java
ReadDir.class

java

  1. C Вход Выход (ввод/вывод)
  2. Файловый ввод-вывод Python
  3. Переменные и литералы Java
  4. Базовый ввод и вывод Java
  5. Java-класс и объекты
  6. Абстрактный класс Java и абстрактные методы
  7. Вложенный и внутренний класс Java
  8. Java бросает и бросает
  9. Класс сканера Java
  10. Автоупаковка и распаковка Java