basic i o operations java
В този урок за видео ще обсъдим механизма за входно-изходни Java, като Java User Input, InputStream, Java Printf, Println и др. Със стандартни I / O устройства:
Във всеки език за програмиране трябва да имаме механизъм за четене на входни данни и също така да изпращаме обработените данни, които също са известни като Изход на крайния потребител.
Както знаете, в света на софтуера има много устройства за въвеждане и извеждане, които програмистите могат да използват за четене на данни и записване или извеждане на данни.
Прочетете нашите Пълна серия за обучение по Java за да получите по-голяма представа за концепциите на Java.
Какво ще научите:
- Видео урок за основните I / O операции в Java
- Допълнителни примери - входни / изходни потоци
- Заключение
Видео урок за основните I / O операции в Java
С помощта на програма Java можете да четете и записвате данни от различни източници и дестинации. Четенето и писането на източници на данни и дестинации включват:
- Файлове
- Тръби
- Интернет връзка
- Буфери в паметта ( E.g: масиви)
- System.in, System.out, System.error
В този видео урок ще имаме входните данни като файл и ще изследваме различни класове, интерфейси и методи, които са достъпни за четене на данни от файла.
Основни операции с IO в Java:
Java файлови операции:
Java I / O (Input-Output) е стандартен механизъм, който обработва входа и генерира изхода. Пакетът „java.io“ съдържа методите за извършване на всички операции по въвеждане и извеждане.
За да изпълнява по-бързо I / O операции, Java използва концепцията за потоци. Потокът може да бъде дефиниран като последователност от данни, състояща се от байтове.
Нека научим повече за I / O потоците Java !!
Стандартни I / O потоци в Java
Езикът Java предлага достъп до системни ресурси, стандартни устройства за въвеждане и извеждане и т.н., използвайки клас „System“. Този клас реализира системен интерфейс за програмиране за достъп до различни ресурси.
Класът System принадлежи към пакета “java.lang” на Java. Освен че осигурява стандартни входно-изходни потоци, класът System осигурява и достъп до променливи на околната среда, външни променливи, зареждане на файлове и библиотеки, както и метод на полезност arrayCopy за копиране на част от масив.
Тъй като този урок се базира само на стандартни I / O, тук ще пропуснем останалите съоръжения, предоставени от класа 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); } }
Изход:
dfs и bfs c ++
В горната програма декларирахме обект от клас 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” заедно с потока “System.out” на Java.
Функцията printf в Java е подобна на функцията printf в C / C ++. За разлика от функциите System.out.print и System.out.println, които приемат един аргумент, System.out.printf приема повече от един аргумент.
Следват вариантите на функцията printf в Java.
Не | Прототип на функция | Описание |
---|---|---|
един | 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 подробно в следващите теми на този урок.
често задавани въпроси
В # 1) Какво представляват стандартният вход и стандартният изход?
Отговор: Стандартните входни и изходни потоци са предварително свързани канали за комуникация между компютърната програма и външната среда, когато програмата започне изпълнението си. Трите различни стандартни I / O потока са стандартен вход (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, за всяка операция за четене или запис ще се изпраща нова заявка до OS. Така че, това може да доведе до проблеми с производителността. За да се избегне този BufferedInputStream или BufferedReader, класовете се използват за опаковане на буферирани класове.
Това чете входния поток, когато буферът е празен.
По същия начин, FileOutputStream или FileWriter, класовете се обгръщат с BufferedOutputStream или BufferedWriter, за да напишат изхода, след като буферът е пълен.
най-добрият текстов редактор за прозорци на python
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, класовете се използват за четене и запис на съдържанието като примитивни типове данни като логически, 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(); } } }
Файл I / O операции
Файловият клас е полезен за извършване на файлови операции.
Някои от файловите операции, извършени с помощта на клас 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 с примери