Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Даниил Алиевский
Средства для работы с файлами – одно из немногих слабых мест системы библиотек языка Java. Файловые библиотеки появились в самых первых версиях Java и были ориентированы на операционные системы того времени, главным образом на UNIX. С тех пор операционные системы ушли далеко вперед, а области применения Java чрезвычайно расширились. Например, для текстовых файлов стали популярны форматы Unicode (16-битовые, UTF-8). Файловая иерархия в мире Windows резко усложнилась – появились такие понятия, как «Desktop», «My Computer», «My Documents». По соображениям совместимости фирма Sun была вынуждена сохранять старые классы и интерфейсы, дополняя их новыми. Получилась довольно запутанная система. В итоге правильная организация работы с файлами в современной Java-программе может оказаться достаточно непростой задачей.
В этой статье мы попытаемся рассмотреть наиболее типичные задачи, возникающие при работе с файлами, и предложить по возможности правильные способы их решения. Все приведенные решения являются фрагментами готовых отлаженных библиотек.
Чтение и запись бинарного файла
Самая простая задача – прочитать некоторый файл в виде массива байт, и наоборот, записать массив байт обратно в файл.
Это одна из немногих задач, решаемых стандартными библиотеками вполне очевидным способом. Основную трудность здесь представляет корректная обработка исключений. К сожалению, в большинстве учебников по Java предлагаются не вполне корректные решения, чреватые в случае ошибки «утечкой» ресурсов системы (файл остается незакрытым) или потерей информации об исключении.
Вот пример возможного решения.
Чтение файла:
public static byte[] loadFileAsBytes(
String fileName) throws IOException
{
return loadFileAsBytes(new File(fileName));
}
public static byte[] loadFileAsBytes(
File file) throws IOException
{
byte[] result= new byte[(int)file.length()];
loadFileAsBytes(file,result);
return result;
}
public static void loadFileAsBytes(File file,
byte[] buf) throws IOException
{