Главная » Java » Байтовые потоки

0

 написании  программы,  которая  считывает  данные  из файла,  а затем  отображает их на экране, необходимо знать, данные какого типа  в этом файле содержатся. С другой стороны, программа, которая просто копирует  файлы  из  одного места в другое, может даже не знать, что в них -­? изображения, текст или же музыка. Такая программа считывает первоначальный файл в оперативную память, а затем записывает его в папку   назначения   байт   за   байтом,   используя   классы   Java FileInputStream или  FileOutputStream.  

Следующий   пример   показывает,   как  использовать   класс FileInputStream  для   чтения   графического   файла   abc.gif из директории  c:\practice.  В операционной системе Microsoft Windows,  для избежания   путаницы  со специальными символами Java, которые начинаются с обратного слэша, для разделения названий директорий и файлов следует использовать двойной слэш: c:\\practice. Эта небольшая программа  выводит на экран не изображение, а всего лишь цифры, показывающие, в каком закодированном виде оно хранится на диске. Каждому  байту соответствует положительное значение от 0 до 255. Класс ByteReader выводит эти значения, разделенные пробелом.

Обратите внимание, что класс ByteReader закрывает поток  в блоке finally.   Никогда не вызывайте метод close() внутри блока try/catch  сразу после завершения чтения из файла, делайте это в блоке finally. В случае возникновения исключения при чтении файла, выполнение  перешагнет через  вычеркнутый вызов  close() и поток не    будет    закрыт!    Чтение    прекращается,    когда    метод FileInputStream.read() возвращает негативное значение.

import java.io.FileInputStream;

import java.io.IOException;

public class ByteReader {

public static void main(String[] args) { FileInputStream myFile = null;

try {

// Открытие байтового потока, указывающего на файл

myFile = new  FileInputStream("c:\\temp\\abc.gif");

while (true) {

int intValueOfByte = myFile.read(); System.out.print(" " + intValueOfByte);

if (intValueOfByte  == -1){

// достигнут конец файла нужно выйти из цикла

break;

}

} // конец цикла while

//  myFile.close(); не помещайте этот вызов здесь

} catch (IOException e) {

System.out.println("Невозможно прочитать файл: "

+ e.toString());

} finally{

try{

myFile.close();

} catch (Exception e1){

e1.printStackTrace();

}

System.out.println(

}

}

} "Чтение файла завершено успешно");

Следующий    фрагмент    кода    записывает    несколько    байт, представленных   целочисленными  значениями,  в  файл  xyz.dat, используя класс FileOutputStream:

int somedata[]= {56,230,123,43,11,37}; FileOutputStream myFile = null;

try {

// Открывается файл xyz.dat, в который

// записываются данные из массива

myFile = new  FileOutputStream("xyz.dat");

for (int i = 0; i <some data.length; i++){

file.write(data[i]);

}

} catch (IOException e) {

System.out.println("Невозможно записать данные в файл: "+

e.toString());

} finally{

try{

myFile.close();

} catch (Exception e1){

e1.printStackTrace();

}

}

Источник: Java  Programming for Kids, Parents and Grandparents by Yakov Fain

По теме:

  • Комментарии