326.15K
Категория: ПрограммированиеПрограммирование

Потоки ввода-вывода. Работа с файлами

1.

Потоки ввода-вывода.
Работа с файлами

2.

File – единственный класс в java.io, который работает непосредственно с дисковыми
файлами. При этом каталог в Java трактуется как обычный файл, но с
дополнительными свойствами.
Остальные классы пакета обеспечивают ввод и вывод данных, базируясь на потоках.
Для работы со стандартными потоками в классе System созданы три статических объекта:
System.in, System.out и System.err.
Поток System.in связан с клавиатурой, поток System.out и System.err - с консолью
приложения Java.

3.

import java.io.*;
...
public static void main(String[] args) throws IOException
{
InputStream is = System.in;
System.out.println("Enter code:");
int code = is.read();
System.out.println("You are entered character with code: " + code);
}
...
Результат выполнения программы
Enter code:
A
You are entered character with code: 65

4.

public static void main(String[] args) throws IOException
{
InputStream input = System.in;
PrintStream output = System.out;
int endCode = (int)'.';
int Code;
output.print("Please, enter characters: ");
do {
Code = input.read();
output.write(Code);
} while (Code!=endCode);
}
...
Результат выполнения программы
Please, enter characters: a
a
b
b
0
0
Z
Z
.

5.

public static void main(String[] args) throws
IOException
{
double a, b, c, D, x1, x2;
PrintStream error = System.err;
Scanner input = new Scanner(System.in);
System.out.println("Please, enter a, b, c: ");
System.out.print("a = ");
a = input.nextDouble();
System.out.print("b = ");
b = input.nextDouble();
System.out.print("c = ");
c = input.nextDouble();
D = b*b - 4*a*c;
if (D<0) {
error.println("The equation has no solution.");
}
else {
x1 = (-b - Math.sqrt(D)) / (2*a);
x2 = (-b + Math.sqrt(D)) / (2*a);
System.out.println("x1 = " + x1);
System.out.println("x2 = " + x2);
}
}
...
Результат выполнения
программы
Please, enter a, b, c:
a = 5
b = 5
c = 5
The equation has no
solution.

6.

Запись и чтение одномерного массива типа int[] в байтовый файловый поток.
Чтобы организовать запись данных в файл нужно:
создать файловый поток типа FileOutputStream;
созданный файловый поток поместить в конструктор DataOutputStream;
использовать методы класса DataOutputStream для записи данных в файл.
Чтобы организовать чтение данных из файла нужно:
создать файловый поток типа FileInputStream;
новосозданный файловый поток поместить в конструктор DataInputStream;
использовать методы класса DataInputStream для чтения данных из файла.

7.

public static void main(String[] args) throws IOException
{
int[] arrInt = { 2, 5, -1, 100, 33 };
FileOutputStream fs = new
FileOutputStream("integers.bin");
DataOutputStream ds = new DataOutputStream(fs);
ds.writeInt(arrInt.length);
for (int i=0; i<arrInt.length; i++)
ds.writeInt((int)arrInt[i]);
fs.close();
int[] arrInt2;
FileInputStream fs2 = new
FileInputStream("integers.bin");
DataInputStream ds2 = new DataInputStream(fs2);
int count = ds2.readInt();
arrInt2 = new int[count];
for (int i=0; i<arrInt2.length; i++)
arrInt2[i] = ds2.readInt();
ds2.close();
System.out.println("Array arrInt2: ");
for (int i=0; i<arrInt2.length; i++)
System.out.println(arrInt2[i]);
}
Результат выполнения программы
Array arrInt2:
2
5
-1
100
33

8.

Запись и чтение данных разных типов (double, int, char)
public static void main(String[] args) throws IOException
{
FileOutputStream fs = new FileOutputStream("data.bin");
DataOutputStream ds = new DataOutputStream(fs);
ds.writeDouble(5.85);
ds.writeInt(2000);
ds.writeChar('Z');
fs.close();
double doubleData;
int intData;
char charData;
FileInputStream fs2 = new FileInputStream("data.bin");
DataInputStream ds2 = new DataInputStream(fs2);
doubleData = ds2.readDouble();
intData = ds2.readInt();
charData = ds2.readChar();
ds2.close();
System.out.println("doubleData = " + doubleData);
System.out.println("intData = " + intData);
System.out.println("charData = " + charData);
}
Результат работы программы
doubleData = 5.85
intData = 2000
charData = Z

9.

Копирование файлов с использованием байтового потока
public static void main(String[] args) throws IOException
{
FileInputStream fi = null;
finally {
FileOutputStream fo = null;
try {
try {
if (fi != null)
fi = new FileInputStream("inputFile.txt");
fi.close();
fo = new FileOutputStream("outputFile.txt"); }
int d;
catch (IOException e2) {
do {
System.out.println("Cannot close file
d = fi.read();
\"inputFile.txt\"");
if (d != -1)
}
fo.write(d);
} while (d != -1);
try {
System.out.println("Ok!");
if (fo != null)
}
fo.close();
catch (IOException e) {
}
System.out.println("I/O error: " + e);
catch (IOException e2) {
}
System.out.println("Cannot close file
\"outputFile.txt\"");
}
}
}

10.

Конструкторы, формирующие имя файла из нескольких частей.
public static void main(String[] args) throws IOException
{
File f1 = new File("output.txt");
String path1 = f1.getPath();
System.out.println(path1);
File f2 = new File("C:\\", "Program Files");
String path2 = f2.getPath();
System.out.println("path2 = " + path2);
File f3 = new File("C:\\Programs\\Java\\Project22");
File f4 = new File(f3,"output.txt");
String path3 = f3.getPath();
String path4 = f4.getPath();
Результат выполнения программы
System.out.println("path3 = " + path3);
System.out.println("path4 = " + path4);} output.txt
path2 = C:\Program Files
path3 = C:\Programs\Java\Project22
path4 = C:\Programs\Java\Project22\output.txt

11.

Метод getName(). Получить имя файла или каталога
Общая форма использования метода следующая
name = fileObj.getName();
name – переменная типа String, которая есть результатом выполнения метода;
fileObj – файловый объект, связанный с файлом или каталогом.
public static void main(String[] args) throws
IOException
{
f = new File("C:\\Program Files");
String name = f.getName();
System.out.println("name = " + name);
}
Результат выполнения программы
name = Program Files

12.

Метод getPath(). Получить имя файла
Общая форма использования метода следующая
path = fileObj.getPath();
path – строка типа String, что есть именем файла (каталога), которое было задано
при создании файловой переменной fileObj.
public static void main(String[] args) throws
IOException
{
File f = new File("output.txt");
String Path = f.getPath();
System.out.println("Path = " + Path);
f = new File("C:\\Program Files");
Path = f.getPath();
System.out.println("Path = " + Path);
}

13.

Метод isAbsolute(). Определить, указан ли полный путь к файлу
Общая форма использования метода следующая
res = fileObj.isAbsolute();
res – результат, который равен true, если при создании файловой
переменной fileObj был задан абсолютный путь.
public static void main(String[] args) throws IOException
{
File f1 = new File("output.txt");
boolean res1;
res1 = f1.isAbsolute();
System.out.println("res1 = " + res1);
File f2 = new File("C:\\Program Files");
boolean res2 = f2.isAbsolute();
System.out.println("res2 = " + res2);}

14.

Метод getAbsolutePath(). Получить полный путь к файлу
Общая форма использования метода следующая
path = fileObj.getAbsolutePath();
path – строка типа String, которая есть результатом;
fileObj – файловый объект, который связан с файлом, для которого нужно определить
абсолютный путь.
public static void main(String[] args) throws IOException
{
File f = new File("output.txt");
String absPath = f.getAbsolutePath();
System.out.println("Path = " + absPath);
}
Результат выполнения программы
Path = C:\Programs\Java\Project22\output.txt

15.

Методы canRead(), canWrite(). Определение того, допускает ли файловый объект
чтение и запись
public static void main(String[] args) throws IOException
{
File f = new File("output.txt");
if (f.canRead())
System.out.println("The result of canRead() is true.");
else
System.out.println("The result of canRead() is false");
if (f.canWrite())
System.out.println("The result of canWrite() is true.");
else
System.out.println("The result of canWrite() is false");
}
Результат работы программы
The result of canRead() is true.
The result of canWrite() is true.

16.

Метод exists(). Определение наличия файла (каталога)
Общая форма использования метода следующая
res = fileObj.exists();
res – результат работы метода. Если res = true, то заданный файл существует;
fileObj – объект, который проверяется.
public static void main(String[] args) throws IOException
{
File f = new File("output.txt");
if (f.exists())
System.out.println("File is present.");
else
System.out.println("File is not present");
File f2 = new File("C:\\Program Files");
if (f2.exists())
System.out.println("The directory is present.");
else
System.out.println("The directory is not present.");
}

17.

Метод isDirectory(). Определить, связан ли файловый объект с
директорием
Общая форма использования метода следующая
res = fileObj.isDirectory();
res – значение типа bool. Если res=true, то файл есть директорием;
fileObj – файловый объект, который проверяется.
public static void main(String[] args) throws IOException
{
File f = new File("C:\\Program Files");
if (f.exists()) {
if (f.isDirectory()) {
System.out.println("Directory.");
}
else
System.out.println("File.");
}
else
System.out.println("The file is not present");

18.

Метод isFile(). Определить, связан ли файловый объект с файлом
Общая форма использования метода следующая
res = fileObj.isFile();
res – результат вычисления. Если файловый объект есть файлом, то res = true;
fileObj – файловый объект.
public static void main(String[] args) throws IOException
{
File f = new File("output.txt");
if (f.exists()) {
if (f.isFile()) {
System.out.println("File object is file.");
}
else
System.out.println("File object is not file.");
}
else
System.out.println("The file is not present");}

19.

Метод isHidden(). Определить, есть ли файловый объект скрытым
Общая форма использования метода
res = fileObj.isHidden();
fileObj – файловый объект;
res – результат работы метода. Если res = true, то файловый объект связан со скрытым
файлом.
public static void main(String[] args) throws IOException
{
File f = new File("output.txt");
if (f.isHidden())
System.out.println("The file \"output.txt\" is hidden.");
else
System.out.println("The file \"output.txt\" is not hidden.");
}

20.

Метод length(). Определить размер в байтах файла, который связан с файловым
объектом
Общая форма long length()
public static void main(String[] args) throws IOException
{
File f = new File("abc.txt");
FileWriter fw = new FileWriter(f);
fw.write("Hello world!");
fw.close();
long len = f.length();
System.out.println("len = " + len);
}
Результат работы программы
len = 12

21.

Метод delete(). Удаление файла
Общая форма использования метода
res = fileObj.delete();
fileObj – файловый объект, который связан с файлом, который нужно удалить;
res – результат выполнения метода. Если res = true, то удаление файла состоялось
успешно.
public static void main(String[] args) throws IOException
{
File f = new File("somefile.txt");
if (f.exists()) {
f.delete();
System.out.println("The file is deleted.");
}
else
System.out.println("The file is not present.");
}

22.

Метод mkdir(). Создание папки или каталога
Общая форма использования метода следующая
res = fileObj.mkdir();
res – результат типа bool. Если каталог создан успешно, то res = true, в противном случае res =
false;
fileObj – объект типа File, который связан с именем создаваемого каталога.

23.

public static void main(String[] args) throws IOException
{
File f = new File("123");
if (!f.exists()) {
if (f.mkdir()) {
System.out.println("The folder is created!");
}
else
System.out.println("The folder is not created.");
}
else
System.out.println("The folder is present.");
File f2 = new File("C:\\Programs\\345");
boolean res = f2.mkdir();
if (res)
System.out.println("The folder C:\\Programs\\345 is created.");
else
System.out.println("The folder C:\\Programs\\345 is not created.");
}

24.

Результат работы программы
The folder is present.
The folder C:\Programs\345 is created.
Метод mkdirs(). Создание нескольких вложенных папок
Общая форма использования метода следующая:
res = fileObj.mkdirs();
fileObj – файловый объект, который содержит строку с именем или
именами папок, которые нужно создать;
res – результат выполнения метода. Если последовательность папок
создана успешно, то res = true.

25.

public static void main(String[] args) throws IOException
{
File f = new File("C:\\ABC\\DEF\\GHI");
if (f.mkdirs())
System.out.println("The folders is created.");
else
System.out.println("The folders is not created");
}
Метод renameTo(File). Переименование файла
Общая форма использования метода следующая
res = f1.renameTo(f2);
res – результат выполнения метода. Если файл переименован успешно, то res = true,
иначе res = false;
f1 – файловая переменная, соответствующая файлу-источнику, который нужно
переименовать;
f2 – файловая переменная, соответствующая новому имени файла-источника f1 после его

26.

public static void main(String[] args) throws IOException
{
// Метод renameTo() - переименовать файл.
// Переименовать файл strings.txt в файл array.txt.
// В обеих файлах задается относительный путь
// 1. Объявить файловую переменную и связать ее с файлом
File f1 = new File("abc.txt");
File f2 = new File("array.txt");
// Если файл f1 существует, то переименовать его
if (f1.exists()) {
if (f1.renameTo(f2)) {
System.out.println("Ok!"); // переименован успешно
}
else
System.out.println("The file is not renamed."); // файл не переименован
}
else
System.out.println("The file is not present");
}

27.

Метод getTotalSpace(). Определение объема диска
Общая форма использования метода следующая
totalSpace = fileObj.getTotalSpace();
fileObj – файловый объект, в котором определено имя диска для которого определяется размер;
totalSpace – переменная типа long, которая есть результатом выполнения метода.
public static void main(String[] args) throws IOException
{
File f = new File("E:\\");
long totalSpace = f.getTotalSpace();
System.out.println("Drive E: - Total space = " + totalSpace);
f = new File("C:\\");
totalSpace = f.getTotalSpace();
System.out.println("Drive C: - Total space = " + totalSpace);
}
Результат выполнения программы
Drive E: - Total space = 790486839296
Drive C: - Total space = 208684355584

28.

Метод getFreeSpace(). Определить свободное место на диске
Общая форма использования метода следующая
space = fileObj.getFreeSpace();
fileObj – файловый объект, который содержит имя носителя, имя файла или имя папки. Если задается им
файла или папки, то определяется объем свободного места для носителя, на котором этот диск и файл
размещены;
space – переменная типа long, которая есть результатом работы метода.
public static void main(String[] args) throws IOException
{
File f = new File("E:\\");
long freeSpace = f.getFreeSpace();
System.out.println("Drive E: - Free space = " + freeSpace);
f = new File("C:\\");
freeSpace = f.getFreeSpace();
System.out.println("Drive C: - Free space = " + freeSpace);
}
Результат выполнения программы
Drive E: - Free space = 197617647616
Drive C: - Free space = 18358034432

29.

Метод getUsableSpace(). Определение полезного места на диске
Общая форма использования метода следующая:
space = fileObj.getUsageSpace();
fileObj – файловый объект, который содержит имя диска или имя файла. Если для fileObj определено
имя файла, то определяется объем носителя, на котором этот файл сохраняется;
space – переменная типа long, которая есть размером полезного места на диске.
public static void main(String[] args) throws IOException
{
File f = new File("E:\\");
long usableSpace = f.getUsableSpace();
System.out.println("Drive E: - Usable space = " + usableSpace);
f = new File("C:\\");
usableSpace = f.getUsableSpace();
System.out.println("Drive C: - Usable space = " + usableSpace);
}
Результат работы программы
Drive E: - Usable space = 197617647616
Drive C: - Usable space = 18358034432
English     Русский Правила