Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* The MIT License
*
* Copyright 2015 Kamnev Georgiy ([email protected]).
*
* Данная лицензия разрешает, безвозмездно, лицам, получившим копию данного программного
* обеспечения и сопутствующей документации (в дальнейшем именуемыми "Программное Обеспечение"),
* использовать Программное Обеспечение без ограничений, включая неограниченное право на
* использование, копирование, изменение, объединение, публикацию, распространение, сублицензирование
* и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется
* данное Программное Обеспечение, при соблюдении следующих условий:
*
* Вышеупомянутый копирайт и данные условия должны быть включены во все копии
* или значимые части данного Программного Обеспечения.
*
* ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ ЛЮБОГО ВИДА ГАРАНТИЙ,
* ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ,
* СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И НЕНАРУШЕНИЯ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ
* ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ
* ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ
* ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
* ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.
*/
package xyz.cofe.io;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import java.util.logging.Level;
import java.util.logging.Logger;
import xyz.cofe.collection.Func1;
import xyz.cofe.collection.Func2;
/**
* Функции обработки Stream
* @author user
*/
public class IOFun {
private static final Lock lock = new ReentrantLock();
private static int defaultBlockSize = -1;
private static int getDefaultBlockSize(){
try{
lock.lock();
if( defaultBlockSize<0 ){
defaultBlockSize = 1024 * 8;
}
return defaultBlockSize;
}finally{
lock.unlock();
}
}
//
/**
* Копирует данные из входного потока в выходной поток.
* Процесс копирования можно прервать послав потоку (Thread) сигнал прерывания.
* @param from Из какого потока копировать
* @param to В какой поток копировать
* @param maxSize Максимальное кол-во копируемых данных (0 и меньше - копирование до конца)
* @param blockSize Размер блока копируемых данных (0 и меньше - по умолчанию)
* @param progress Функция уведомления о прогрессе (возможно null)
* аргумент функции - кол-во прочитаных байтов
* @return Кол-во скопированных байтов
* @throws java.io.IOException Если не может скопировать данные
*/
public static long copy(
InputStream from,
OutputStream to,
long maxSize,
int blockSize,
Func1
//
/**
* Чтение байтового потока
* @param from байтовый поток данных
* @param maxSize Максимальное кол-во копируемых данных (0 и меньше - копирование до конца)
* @param blockSize Размер блока копируемых данных (0 и меньше - по умолчанию)
* @param progress Функция уведомления о прогрессе (возможно null),
* аргумент функции - кол-во прочитаных байтов
* @return Набор байтов
* @throws IOException Ошибка ввода - вывода
*/
public static byte[] readBytes(
InputStream from,
int maxSize,
int blockSize,
Func1
//
/**
* Запись байт данных в поток
* @param to Поток в который происходит запись
* @param data Набор байтов которых необходимо записать
* @param dataOffset Смещение в наборе данных
* @param dataSize Кол-во байт необходимых для записи
* @param blockSize Размер блока копируемых данных (0 и меньше - по умолчанию)
* @param progress Функция уведомления копируемых данных (возможно null),
* первый аргумент - кол-во записанных байтов,
* второй аргумент - кол-во всего копируемых данных
* @throws IOException Ошибка ввода - вывода
*/
public static void writeBytes(
OutputStream to,
byte[] data,
int dataOffset,
int dataSize,
int blockSize,
Func2
//
/**
* Чтение текстовых данных
* @param from Из какого потока копировать
* @param cs Кодировка (возможно null, будет использоваться кодировка по умолчанию)
* @param maxSize Максимальное кол-во копируемых данных (0 и меньше - копирование до конца)
* @param blockSize Размер блока копируемых данных (0 и меньше - по умолчанию)
* @param progress Функция уведомления о прогрессе (возможно null)
* аргумент функции - кол-во прочитаных байтов
* @return Текстовые данные
* @throws IOException Ошибка ввода - вывода
*/
public static String readText(
InputStream from,
Charset cs,
int maxSize,
int blockSize,
Func1
//
/**
* Запись текстовых данных в поток
* @param to Поток в который происходит запись
* @param string Текстовые данные
* @param cs Кодировка (возможно null, будет использоваться кодировка по умолчанию)
* @param blockSize Размер блока копируемых данных (0 и меньше - по умолчанию)
* @param progress Функция уведомления копируемых данных (возможно null),
* первый аргумент - кол-во записанных байтов,
* второй аргумент - кол-во всего копируемых данных
* @throws IOException Ошибка ввода - вывода
*/
public static void writeText(
OutputStream to,
String string,
Charset cs,
int blockSize,
Func2
//
/**
* Чтение байт данных
* @param file Файл из которого производится чтение
* @param maxSize Максимальный объем читаемых данных
* @param blockSize Размер блока копируемых данных (0 и меньше - по умолчанию)
* @param progress Функция уведомления копируемых данных (возможно null),
* первый аргумент - кол-во записанных байтов,
* второй аргумент - кол-во всего копируемых данных
* @return Набор байтов
* @throws IOException Ошибка ввода - вывода
*/
public static byte[] readBytes(
java.io.File file,
int maxSize,
int blockSize,
Func2
//
/**
* Запись байт данных в файл
* @param file Файл в который производится запись
* @param data Набор байтов которых необходимо записать
* @param dataOffset Смещение в наборе данных
* @param dataSize Кол-во байт необходимых для записи
* @param blockSize Размер блока копируемых данных (0 и меньше - по умолчанию)
* @param progress Функция уведомления копируемых данных (возможно null),
* первый аргумент - кол-во записанных байтов,
* второй аргумент - кол-во всего копируемых данных
* @throws IOException Ошибка ввода - вывода
*/
public static void writeBytes(
java.io.File file,
byte[] data,
int dataOffset,
int dataSize,
int blockSize,
Func2 progress
) throws IOException {
if( file==null )throw new IllegalArgumentException( "file==null" );
if( data==null )throw new IllegalArgumentException( "data==null" );
if( dataOffset<0 )throw new IllegalArgumentException( "dataOffset("+dataOffset+")<0" );
if( dataSize<0 )throw new IllegalArgumentException( "dataSize("+dataOffset+")<0" );
if( blockSize<1 )blockSize = getDefaultBlockSize();
FileOutputStream fout = new FileOutputStream(file);
writeBytes(fout, data, dataOffset, dataSize, blockSize, progress);
fout.flush();
fout.close();
if( dataSize==0 ){
if( progress!=null ){
try{
progress.apply((long)0, (long)0);
}catch( Throwable err ){
Logger.getLogger(IOFun.class.getName())
.log( Level.WARNING, "error: "+err.getMessage(), err );
}
}
}
}
/**
* Запись байт данных в файл
* @param file Файл в который производится запись
* @param data Набор байтов которых необходимо записать
* @param dataOffset Смещение в наборе данных
* @param dataSize Кол-во байт необходимых для записи
* @throws IOException Ошибка ввода - вывода
*/
public static void writeBytes(
java.io.File file,
byte[] data,
int dataOffset,
int dataSize
) throws IOException {
if( file==null )throw new IllegalArgumentException( "file==null" );
if( data==null )throw new IllegalArgumentException( "data==null" );
if( dataOffset<0 )throw new IllegalArgumentException( "dataOffset("+dataOffset+")<0" );
if( dataSize<0 )throw new IllegalArgumentException( "dataSize("+dataOffset+")<0" );
FileOutputStream fout = new FileOutputStream(file);
writeBytes(fout, data, dataOffset, dataSize, -1, null);
fout.flush();
fout.close();
}
/**
* Запись байт данных в файл
* @param file Файл в который производится запись
* @param data Набор байтов которых необходимо записать
* @throws IOException Ошибка ввода - вывода
*/
public static void writeBytes(
java.io.File file,
byte[] data
) throws IOException {
if( file==null )throw new IllegalArgumentException( "file==null" );
if( data==null )throw new IllegalArgumentException( "data==null" );
FileOutputStream fout = new FileOutputStream(file);
writeBytes(fout, data, 0, data.length, -1, null);
fout.flush();
fout.close();
}
//
//
/**
* Запись байт данных в конец файла
* @param file Файл в который производится запись
* @param data Набор байтов которых необходимо записать
* @param dataOffset Смещение в наборе данных
* @param dataSize Кол-во байт необходимых для записи
* @param blockSize Размер блока копируемых данных (0 и меньше - по умолчанию)
* @param progress Функция уведомления копируемых данных (возможно null),
* первый аргумент - кол-во записанных байтов,
* второй аргумент - кол-во всего копируемых данных
* @throws IOException Ошибка ввода - вывода
*/
public static void appendBytes(
java.io.File file,
byte[] data,
int dataOffset,
int dataSize,
int blockSize,
Func2 progress
) throws IOException {
if( file==null )throw new IllegalArgumentException( "file==null" );
if( data==null )throw new IllegalArgumentException( "data==null" );
if( dataOffset<0 )throw new IllegalArgumentException( "dataOffset("+dataOffset+")<0" );
if( dataSize<0 )throw new IllegalArgumentException( "dataSize("+dataOffset+")<0" );
if( blockSize<1 )blockSize = getDefaultBlockSize();
FileOutputStream fout = new FileOutputStream(file, true);
writeBytes(fout, data, dataOffset, dataSize, blockSize, progress);
fout.flush();
fout.close();
if( dataSize==0 ){
if( progress!=null ){
try{
progress.apply((long)0, (long)0);
}catch( Throwable err ){
Logger.getLogger(IOFun.class.getName())
.log( Level.WARNING, "error: "+err.getMessage(), err );
}
}
}
}
/**
* Запись байт данных в конец файла
* @param file Файл в который производится запись
* @param data Набор байтов которых необходимо записать
* @param dataOffset Смещение в наборе данных
* @param dataSize Кол-во байт необходимых для записи
* @throws IOException Ошибка ввода - вывода
*/
public static void appendBytes(
java.io.File file,
byte[] data,
int dataOffset,
int dataSize
) throws IOException {
if( file==null )throw new IllegalArgumentException( "file==null" );
if( data==null )throw new IllegalArgumentException( "data==null" );
if( dataOffset<0 )throw new IllegalArgumentException( "dataOffset("+dataOffset+")<0" );
if( dataSize<0 )throw new IllegalArgumentException( "dataSize("+dataOffset+")<0" );
appendBytes(file, data, dataOffset, dataSize, -1, null);
}
/**
* Запись байт данных в конец файла
* @param file Файл в который производится запись
* @param data Набор байтов которых необходимо записать
* @throws IOException Ошибка ввода - вывода
*/
public static void appendBytes(
java.io.File file,
byte[] data
) throws IOException {
if( file==null )throw new IllegalArgumentException( "file==null" );
if( data==null )throw new IllegalArgumentException( "data==null" );
appendBytes(file, data, 0, data.length, -1, null);
}
//
//
/**
* Чтение текстовых данных
* @param file Файл из которого производится чтение
* @param cs Кодировка (возможно null, будет использоваться кодировка по умолчанию)
* @param maxSize Максимальный объем читаемых данных
* @param blockSize Размер блока копируемых данных (0 и меньше - по умолчанию)
* @param progress Функция уведомления копируемых данных (возможно null),
* первый аргумент - кол-во записанных байтов,
* второй аргумент - кол-во всего копируемых данных
* @return Текстовые данные
* @throws IOException Ошибка ввода - вывода
*/
public static String readText(
java.io.File file,
Charset cs,
int maxSize,
int blockSize,
Func2 progress
) throws IOException {
if( cs==null )cs = Charset.defaultCharset();
if( file==null )throw new IllegalArgumentException( "file==null" );
byte[] data = readBytes(file, maxSize, blockSize, progress);
return new String(data, cs);
}
/**
* Чтение текстовых данных
* @param file Файл из которого производится чтение
* @param cs Кодировка (возможно null, будет использоваться кодировка по умолчанию)
* @param maxSize Максимальный объем читаемых данных
* @return Текстовые данные
* @throws IOException Ошибка ввода - вывода
*/
public static String readText(
java.io.File file,
Charset cs,
int maxSize
) throws IOException {
if( cs==null )cs = Charset.defaultCharset();
if( file==null )throw new IllegalArgumentException( "file==null" );
byte[] data = readBytes(file, maxSize, -1, null);
return new String(data, cs);
}
/**
* Чтение текстовых данных
* @param file Файл из которого производится чтение
* @param cs Кодировка (возможно null, будет использоваться кодировка по умолчанию)
* @return Текстовые данные
* @throws IOException Ошибка ввода - вывода
*/
public static String readText(
java.io.File file,
Charset cs
) throws IOException {
if( cs==null )cs = Charset.defaultCharset();
if( file==null )throw new IllegalArgumentException( "file==null" );
byte[] data = readBytes(file, -1, -1, null);
return new String(data, cs);
}
//
//
/**
* Запись текстовых данных в файл
* @param file Файл в который производится запись
* @param string Текстовые данные
* @param cs Кодировка (возможно null, будет использоваться кодировка по умолчанию)
* @param blockSize Размер блока копируемых данных (0 и меньше - по умолчанию)
* @param progress Функция уведомления копируемых данных (возможно null),
* первый аргумент - кол-во записанных байтов,
* второй аргумент - кол-во всего копируемых данных
* @throws IOException Ошибка ввода - вывода
*/
public static void writeText(
java.io.File file,
String string,
Charset cs,
int blockSize,
Func2 progress
) throws IOException
{
if( cs==null )cs = Charset.defaultCharset();
if( file==null )throw new IllegalArgumentException( "file==null" );
if( string==null )throw new IllegalArgumentException( "string==null" );
FileOutputStream fout = new FileOutputStream(file);
writeText(fout, string, cs, blockSize, progress);
fout.flush();
fout.close();
}
/**
* Запись текстовых данных в файл
* @param file Файл в который производится запись
* @param string Текстовые данные
* @param cs Кодировка (возможно null, будет использоваться кодировка по умолчанию)
* @throws IOException Ошибка ввода - вывода
*/
public static void writeText(
java.io.File file,
String string,
Charset cs
) throws IOException
{
if( cs==null )cs = Charset.defaultCharset();
if( file==null )throw new IllegalArgumentException( "file==null" );
if( string==null )throw new IllegalArgumentException( "string==null" );
FileOutputStream fout = new FileOutputStream(file);
writeText(fout, string, cs, -1, null);
fout.flush();
fout.close();
}
//
//
/**
* Запись текстовых данных в конец файла
* @param file Файл в который производится запись
* @param string Текстовые данные
* @param cs Кодировка (возможно null, будет использоваться кодировка по умолчанию)
* @param blockSize Размер блока копируемых данных (0 и меньше - по умолчанию)
* @param progress Функция уведомления копируемых данных (возможно null),
* первый аргумент - кол-во записанных байтов,
* второй аргумент - кол-во всего копируемых данных
* @throws IOException Ошибка ввода - вывода
*/
public static void appendText(
java.io.File file,
String string,
Charset cs,
int blockSize,
Func2 progress
) throws IOException
{
if( cs==null )cs = Charset.defaultCharset();
if( file==null )throw new IllegalArgumentException( "file==null" );
if( string==null )throw new IllegalArgumentException( "string==null" );
FileOutputStream fout = new FileOutputStream(file,true);
writeText(fout, string, cs, blockSize, progress);
fout.flush();
fout.close();
}
/**
* Запись текстовых данных в конец файла
* @param file Файл в который производится запись
* @param string Текстовые данные
* @param cs Кодировка (возможно null, будет использоваться кодировка по умолчанию)
* @throws IOException Ошибка ввода - вывода
*/
public static void appendText(
java.io.File file,
String string,
Charset cs
) throws IOException
{
if( cs==null )cs = Charset.defaultCharset();
if( file==null )throw new IllegalArgumentException( "file==null" );
if( string==null )throw new IllegalArgumentException( "string==null" );
FileOutputStream fout = new FileOutputStream(file,true);
writeText(fout, string, cs, -1, null);
fout.flush();
fout.close();
}
//
//
/**
* Чтение байт данных
* @param url Файл из которого производится чтение
* @param maxSize Максимальный объем читаемых данных
* @param blockSize Размер блока копируемых данных (0 и меньше - по умолчанию)
* @param progress Функция уведомления о прогрессе (возможно null)
* аргумент функции - кол-во прочитаных байтов
* @return Набор байтов
* @throws IOException Ошибка ввода - вывода
*/
public static byte[] readBytes(
java.net.URL url,
int maxSize,
int blockSize,
Func1 progress
) throws IOException
{
if( url==null )throw new IllegalArgumentException( "url==null" );
InputStream input = url.openStream();
byte[] res = readBytes(input, maxSize, blockSize, progress);
input.close();
return res;
}
/**
* Чтение байт данных
* @param url Файл из которого производится чтение
* @return Набор байтов
* @throws IOException Ошибка ввода - вывода
*/
public static byte[] readBytes(
java.net.URL url
) throws IOException
{
return readBytes(url, -1, -1, null);
}
//
//
/**
* Чтение текстовых данных
* @param url Файл из которого производится чтение
* @param cs Кодировка (возможно null, будет использоваться кодировка по умолчанию)
* @param maxSize Максимальный объем читаемых данных
* @param blockSize Размер блока копируемых данных (0 и меньше - по умолчанию)
* @param progress Функция уведомления о прогрессе (возможно null)
* аргумент функции - кол-во прочитаных байтов
* @return Текстовые данные
* @throws IOException Ошибка ввода - вывода
*/
public static String readText(
java.net.URL url,
Charset cs,
int maxSize,
int blockSize,
Func1 progress
) throws IOException
{
if( cs==null )cs = Charset.defaultCharset();
byte[] data = readBytes(url, maxSize, blockSize, progress);
return new String(data, cs);
}
/**
* Чтение текстовых данных
* @param url Файл из которого производится чтение
* @param cs Кодировка (возможно null, будет использоваться кодировка по умолчанию)
* @return Текстовые данные
* @throws IOException Ошибка ввода - вывода
*/
public static String readText(
java.net.URL url,
Charset cs
) throws IOException {
if( cs==null )cs = Charset.defaultCharset();
byte[] data = readBytes(url, -1, -1, null);
return new String(data, cs);
}
//
}