basic i o operations java
У цьому відео-посібнику ми обговоримо механізм введення-виводу Java, такий як введення користувачем Java, InputStream, Java Printf, Println тощо, зі стандартними пристроями вводу-виводу:
У кожній мові програмування нам потрібно мати механізм зчитування вхідних даних, а також надсилання оброблених даних, які також відомі як вихід, кінцевому користувачеві.
Як вам відомо, у світі програмного забезпечення існує багато пристроїв введення та виведення, за допомогою яких програмісти можуть читати дані та записувати чи виводити дані.
Прочитайте наш Пройдіть серію навчальних програм Java щоб отримати більше розуміння концепцій Java.
Що ви дізнаєтесь:
- Відео-посібник з основних операцій вводу-виводу в Java
- Додаткові приклади - вхідні / вихідні потоки
- Висновок
Відео-посібник з основних операцій вводу-виводу в Java
Використовуючи програму Java, ви можете читати та записувати дані з різних джерел та напрямків. Читання та запис джерел даних та пунктів призначення включають:
- Файли
- Труби
- Мережеві підключення
- Буфери в пам'яті ( Наприклад: масиви)
- System.in, System.out, System.error
У цьому відео-посібнику ми будемо мати вхідні дані у вигляді файлу та досліджувати різні класи, інтерфейси та методи, доступні для зчитування даних із файлу.
проста Java-програма для сортування чисел у порядку зростання
Основні операції вводу-виводу в Java:
Операції з файлами Java:
Введення-виведення Java (вхід-вихід) - це стандартний механізм, який обробляє вхідні дані та генерує вихідні дані. Пакет “java.io” містить методи виконання всіх операцій введення та виведення.
Для швидшого виконання операцій вводу-виводу Java використовує концепцію потоків. Потік можна визначити як послідовність даних, що складається з байтів.
Давайте дізнаємось більше про потоки вводу-виводу Java !!
Стандартні потоки вводу-виводу в Java
Мова Java пропонує доступ до системних ресурсів, стандартних пристроїв введення-виведення тощо за допомогою класу “Система”. Цей клас реалізує системний інтерфейс програмування для доступу до різних ресурсів.
Клас System належить до пакету 'java.lang' Java. Окрім стандартних потоків вводу-виводу, клас System також забезпечує доступ до змінних середовища, зовнішніх змінних, завантаження файлів та бібліотек, а також корисний метод arrayCopy для копіювання частини масиву.
Оскільки цей посібник базується лише на стандартному введенні / виведенні, ми пропустимо решту засобів, наданих класом System тут.
З точки зору вводу-виводу клас System пропонує такі потоки:
# 1) Стандартний вхідний потік (System.in)
Вхідний потік, що надається класом System, System.in, використовується для зчитування вхідних даних із стандартного пристрою введення, такого як клавіатура.
Потік залишається відкритим і готовий до зчитування даних, що передаються користувачем на стандартний пристрій введення.
Наведений нижче приклад демонструє функцію System.in.read для зчитування однієї цілої цифри.
public class Main { public static void main(String args()) throws java.io.IOException { int ch; System.out.println('Enter the character to be displayed : '); ch = System.in.read(); System.out.println('You entered : ' + (char)ch); } }
Вихід:
# 2) Стандартний вихідний потік (System.out)
Інтерфейс System.out класу System використовується для запису вихідних даних програми на стандартний пристрій виведення, такий як монітор. У більшості випадків інтерфейс System.out записує вивід команди на стандартний пристрій виведення.
Він використовує три методи з класу “PrintStream”, оскільки стандартний результат виводиться з цього класу.
Ці методи:
- друк
- println
- писати
Методи 'print' і 'println' мають однакову функціональність, за винятком однієї різниці, що метод println додає символ нового рядка ( n) до виводу.
Метод запису використовується не часто, за винятком випадків, коли мають відображатися дані, що не належать до ASCII.
Наступний приклад демонструє потік System.out.
public class Main { public static void main(String args()) throws java.io.IOException { String stringType = 'Java Tutorial Series'; char() charTypeArray = { 'a', 'e', 'i', 'o', 'u' }; boolean booleanType = true; int integerType = 10; double doubleType = Math.PI; long longType = Long.MAX_VALUE; float floatType = Float.MIN_VALUE; System.out.println('String::' + stringType); System.out.print('Character::'); System.out.println(charTypeArray); System.out.println('Boolean::' + booleanType); System.out.println('Integer::' + integerType); System.out.println('Double::' + doubleType); System.out.println('Long::' + longType); System.out.println('Float::' + floatType); } }
Вихід:
У наведеній вище програмі показані функції “print” та “println”, що використовуються з інтерфейсом System.out. Тут ми визначили змінні різних типів даних і відображаємо кожну з них за допомогою інтерфейсу System.out.
# 3) Стандартний потік помилок (System.err)
Стандартний потік помилок System.err використовується для відображення помилок, якщо такі були під час виконання програми.
Як і потік System.out, потік помилок також підтримує три методи класу PrintStream, print, println і пише.
Методи зчитування вхідних даних із консолі
Окрім вхідного потоку, описаного вище, існує ще кілька методів, за допомогою яких ми можемо читати вхідні дані з консолі в Java.
Ці методи обговорюються нижче.
# 1) Клас BufferedReader
Клас BufferedReader був вперше представлений в JDK 1.0 і є класичним методом зчитування вхідних даних з консолі.
Вхідний потік (System.in) загортається всередину класу InputStreamReader, який, у свою чергу, обертається в BufferedReader.
Наступна програма показує використання класу BufferedReader для читання вхідних даних від користувача.
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String() args) throws IOException { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); System.out.println('Enter the input string'); String name = reader.readLine(); System.out.println('You entered: ' + name); } }
Вихід:
У наведеній вище програмі ми оголосили об’єкт класу BufferedReader, ініціалізований до потоку System.in. Використовуючи цей об’єкт, ми читаємо цілий рядок вводу.
Як бачите, ви можете прочитати всі буферизовані дані, що робить цю функцію дуже ефективною. Єдиним недоліком є загадковий код, який важко запам’ятати кожного разу.
# 2) Клас консолі
Клас “System.console” можна використовувати для читання вхідних даних із консолі. Це використовується для особливо читання символів введення, таких як пароль, з командного рядка.
Метод зчитування вхідних даних за допомогою класу консолі на сьогодні є найбільш ефективним та найкращим методом у Java.
Наступна програма демонструє клас System.console.
public class Main { public static void main(String() args) { System.out.println('Enter the input string'); String name = System.console().readLine(); System.out.println('You entered: ' + name); } }
Вихід:
Використовуючи клас System.console, ви можете читати введені символи, не повторюючи символи. Отже, цей метод є більш корисним для читання паролів. По-друге, ви також можете використовувати рядки форматування для форматування вхідних даних, подібні до тих, що використовуються в System.out.printf ().
Хоча це найкращий спосіб читання вхідних даних, зауважте, що клас System.console не можна використовувати з інтерактивним середовищем Java, як IDE.
# 3) Сканер
Використання класу сканера для зчитування вхідних даних, мабуть, найшвидший і кращий метод. Сканер в основному використовується для аналізу типів даних, включаючи примітивні типи та рядки. Але його також можна використовувати для зчитування вхідних даних та їх синтаксичного аналізу за допомогою маркерного введення.
Клас сканера використовує для цього регулярні вирази.
Наступна програма зчитує вхідні дані від користувача за допомогою класу сканера.
import java.util.Scanner; class Main { public static void main(String args()) { Scanner myscan = new Scanner(System.in); System.out.println('Enter the input:'); String mystr = myscan.nextLine(); System.out.println('You entered a string:'+mystr); System.out.println('Enter Next input:'); int num = myscan.nextInt(); System.out.println('You entered an integer:'+num); } }
Вихід:
У вищезазначеній програмі ми використовували клас сканера для зчитування рядкових та цілих даних.
Форматування виводу в Java за допомогою printf
Ми вже бачили, як відображати вихідні дані в програмі Java. У цьому розділі ми побачимо, як форматувати цей результат. Для цього ми використовуємо функцію printf класу “PrintStream” разом із потоком Java “System.out”.
Функція printf у Java подібна до функції printf у C / C ++. На відміну від функцій System.out.print та System.out.println, які приймають один аргумент, System.out.printf приймає більше одного аргументу.
Нижче наводяться варіанти функції printf у Java.
Не | Прототип функції | Опис |
---|---|---|
1 | System.out.printf (рядок); | Друкує рядок, наведений у аргументі, без будь-якого форматування |
два | System.out.printf (формат, аргументи); | Друкує вихідні дані, використовуючи заданий формат рядка 'формат' та аргументи. |
3 | System.out.printf (локаль, формат, аргументи); | Друкує вихідні дані за допомогою заданого рядка формату, застосовуючи локаль та аргументи. |
Зверніть увагу, що функція System.out.format () така ж, як і System.out.printf ().
Загальний синтаксис для визначення рядка формату такий:
%specifier => + for right-aligning, - for left-aligning. => to specify leading/trailing zeros and precision => suggests the data type.
Наприклад:
System.out.println(“ ‘%05.2f’%n”, 2.28);
Згенерує такий результат:
'02 .28 '
Ми будемо детально обговорювати printf на Java у наступних темах цього посібника.
Часті запитання
Q # 1) Що таке стандартний вхід і стандартний вихід?
Відповідь: Стандартні вхідні та вихідні потоки - це попередньо зв’язані канали для зв’язку між комп’ютерною програмою та зовнішнім середовищем, коли програма починає своє виконання. Три різні стандартні потоки вводу-виводу - це стандартний вхід (stdin), стандартний вихід (stdout), стандартна помилка (stderr).
наскрізне тестування проти регресійного тестування
Q # 2) Що таке стандартне введення в програмуванні?
Відповідь: Стандартний ввід або stdin - це потік, який використовується для зчитування вводу зі стандартного пристрою введення, наприклад клавіатури.
Q # 3) Що таке вхідно-вихідний потік?
Відповідь: Вхідно-вихідний потік являє собою джерело, з якого ви зчитуєте вхідні дані, і пункт призначення, до якого направляєте свій вихідний сигнал.
Потік, загалом, представляє безліч пристроїв, які використовуються як джерело та місця призначення, а саме клавіатуру, файл диска, монітори тощо.
Q # 4) Що таке стандартне введення в Java?
Відповідь: Стандартне введення в Java забезпечується класом System як потік System.in. Клас System є частиною пакету java.lang.
Q # 5) Що таке стандартний вихід у Java?
Відповідь: Стандартний висновок у Java забезпечується класом System як потік System.out. Клас System є частиною пакету java.lang.
Додаткові приклади - вхідні / вихідні потоки
Потоки представляють потік даних, і ці дані можуть бути у будь-якому форматі (наприклад, байт, текст, примітивний тип даних тощо). Для запису даних у пункт призначення використовується вихідний потік, а для зчитування даних використовується вхідний потік.
Різні формати для читання та письма
Вхід / вихід можна читати / писати у наступних різних форматах:
# 1) Читання файлу як байтовий потік
Тут дані будуть зчитуватися у байтовому форматі. “ FileInputStream ” і “ FileOutputStream «Класи використовуються для читання вмісту як байт. Таким чином, для кожного байту компілятор надсилатиме запит до ОС.
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class ByteStreamsDemo { public static void main(String() args) throws IOException { FileInputStream fin =null; FileOutputStream fout =null; try { fin=new FileInputStream('input.txt'); fout=new FileOutputStream('out.txt'); int c; while((c=fin.read() )!= -1) { fout.write(c); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if(fin!=null) { fin.close(); }if(fout!=null) { fout.close(); } } } }
# 2) Читання файлу як символьного потоку
Таким чином, вхідний потік буде зчитуватися у форматі символів. Отже, для кожного символу компілятор надішле запит до ОС. “ FileReader ” і “ FileWriter ” класи корисні для читання змісту як персонажа.
public class CharStreamDemo { public static void main(String() args) throws IOException { FileReader input = null; FileWriter output = null; try { input = new FileReader('input.txt'); output = new FileWriter('out1.txt'); int c; while ((c = input.read()) != -1) { output.write(c); } } finally { if (input != null) { input.close(); } if (output != null) { output.close(); } } } }
# 3) Буферизація вхідного / вихідного потоку
Коли ви використовуєте класи FileInputStream або FileReader, для кожної операції читання або запису новий запит буде надіслано до ОС. Отже, це може призвести до проблем із продуктивністю. Щоб уникнути цього BufferedInputStream або BufferedReader, класи використовуються для обтікання небуферованих класів.
Це зчитує вхідний потік, коли буфер порожній.
Подібним чином, FileOutputStream або FileWriter, класи обгортаються BufferedOutputStream або BufferedWriter, щоб записати вихідні дані, коли буфер заповниться.
public class BufferedStreamDemo { public static void main(String() args) throws IOException { BufferedReader input = null; BufferedWriter output = null; try { input = new BufferedReader(new FileReader('input.txt')); output = new BufferedWriter(new FileWriter('out1.txt')); int c; while ((c = input.read()) != -1) { output.write(c); } } finally { if (input != null) { input.close(); } if (output != null) { output.close(); } } } }
# 4) Читання як потік даних
У цьому методі, DataInputStream або DataOutputStream, класи використовуються для читання та запису вмісту як примітивні типи даних, такі як boolean, char, byte, short, int, long, float, double і String. Переважно DataInputStream та DataOutputStream будуть використовуватися разом.
public class DataInputOutputStreamDemo { public static void main(String() args) { File file = new File('read.bin'); FileOutputStream fos = null; DataOutputStream dos = null; try { fos=new FileOutputStream(file); dos=new DataOutputStream(fos); dos.writeInt(50244); dos.writeDouble(400.253); dos.writeChar('d'); dos.flush(); } catch (IOException e) { e.printStackTrace(); }finally { try { if(fos!=null){ fos.close(); } if(dos!=null){ dos.close(); } } catch (Exception e) { e.printStackTrace(); } } /*Reading operation */ FileInputStream fis = null; DataInputStream dis = null; try { fis = new FileInputStream(file); dis = new DataInputStream(fis); System.out.println(dis.readInt()); System.out.println(dis.readDouble()); System.out.println(dis.readChar()); } catch (IOException e) { e.printStackTrace(); }finally { try { if(fis!=null){ fis.close(); } if(dis!=null){ dis.close(); } } catch (Exception e) { e.printStackTrace(); } } } }
# 5) Читання як об’єктний потік
ObjectInputStream / ObjectOutputStream, класи корисні для запису об’єктів у файл та читання об’єктів з файлу. Для зберігання об'єкта у файлі клас повинен реалізувати інтерфейс, що серіалізується.
public class ObjectStreamDemo implements Serializable { int age ; String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
Ми збираємось створити об’єкт для цього класу “ObjectStreamDemo”, і ми запишемо цей об’єкт у файл і прочитаємо той самий об’єкт із цього файлу.
public class ObjectStreamDemoTest { public static void main(String() args) { // TODO Auto-generated method stub ObjectStreamDemo obj=new ObjectStreamDemo(); obj.setAge(32); obj.setName('bob'); try { FileOutputStream fos = new FileOutputStream('t.tmp'); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(obj); oos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } FileInputStream fis; ObjectInputStream ois; try { fis = new FileInputStream('t.tmp'); ois = new ObjectInputStream(fis); ObjectStreamDemo obj1 = (ObjectStreamDemo)ois.readObject(); System.out.println(obj1.name); System.out.println(obj1.age); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch(Exception e) { e.printStackTrace(); } } }
Операції вводу-виводу файлів
Клас файлів корисний для виконання файлових операцій.
Деякі операції з файлами, що виконуються за допомогою класу File, включають:
- Створіть файл
- Перевірте, чи файл існує
- Отримайте шлях до файлу
- Напишіть файл
- Прочитайте файл
- Видаліть файл і перейменуйте файл
- Перевірте дозволи на файл і змініть дозволи на файл
- Перемістіть файл з одного каталогу в інше місце
Демо-програма для створення, читання та запису файлу:
public class CreateFileDemo { public static void main(String() args) throws IOException { File newfile=new File('created.txt'); if(!newfile.exists()) { newfile.createNewFile(); System.out.println('file not exist'); } try { String FILENAME='created.txt'; String content='hi how are u'; FileWriter fwt = new FileWriter(FILENAME); BufferedWriter bwt = new BufferedWriter(fwt); bwt.write(content); System.out.println('writing completed ...'); bwt.close(); } catch (IOException e) { e.printStackTrace(); } } }
Ключові моменти, на які слід звернути увагу:
- Потік - це логічне представлення потоку даних.
- Ви можете читати / писати дані в іншому форматі, наприклад, байт, символ, об'єкт, примітивний тип даних.
- Клас файлу використовується для створення файлу, видалення файлу та переміщення, копіювання або перейменування файлу.
- BufferedInputStream або BufferedOutputStream використовується для поліпшення продуктивності шляхом буферизації даних.
Висновок
Java має пакет java.lang, який забезпечує стандартні засоби введення та виводу, використовуючи клас System.
Окрім потоків, System.in та System.out, які використовуються для стандартного введення та виведення відповідно, існують також інші методи, такі як BufferedReader, клас консолі та клас сканера, який використовується для зчитування вводу від користувача.
Потік System.out використовує функцію класу «PrintStream», print та println для відображення вихідних даних. Це функції, які використовуються для відображення виводу без форматування. Інша функція 'printf', подібна до функції printf у C / C ++, також використовується в Java для форматованого виводу.
Докладніше про клас сканера та функцію printf на Java ми розглянемо у наступних підручниках.
=> Завітайте сюди, щоб ознайомитись із ексклюзивними навчальними посібниками з Java.
НАЗАД Підручник | НАСТУПНИЙ підручник
Рекомендована література
- Основні операції введення / виводу на C ++
- Операції виведення файлу на C ++
- Підручник з Java Collections Framework (JCF)
- Розгортання Java: створення та виконання файлу Java JAR
- Віртуальна машина Java: як JVM допомагає у запуску програми Java
- Вхід-вихід і файли в Python (Python відкриває, читає та записує у файл)
- Модифікатори доступу в Java - Підручник із прикладами
- Підручник з роздумів про Java з прикладами