IOUtilities.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.generic_project.io;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* IOUtilities
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class IOUtilities {
public static void copy(String in, String out)
throws IOException {
FileInputStream fin = null;
FileOutputStream fout = null;
try{
fin = new FileInputStream(in);
fout = new FileOutputStream(out);
IOUtilities.copy(fin,fout);
fout.flush();
}finally{
try{
if(fin!=null)
fin.close();
}catch(Exception e){}
try{
if(fout!=null)
fout.close();
}catch(Exception e){
// close
}
}
}
public static void copy(InputStream in, OutputStream out)
throws IOException {
byte[] buffer = new byte[256];
while (true) {
int bytesRead = in.read(buffer);
if (bytesRead == -1) break;
out.write(buffer, 0, bytesRead);
}
}
public static void copyDirectory(String srcPath, String dstPath)
throws IOException{
IOUtilities.copyDirectory(new File(srcPath), new File(dstPath));
}
public static void copyDirectory(File srcPath, File dstPath)
throws IOException{
if (srcPath.isDirectory()){
if (!dstPath.exists()){
dstPath.mkdir();
}
String files[] = srcPath.list();
if(files!=null) {
for(int i = 0; i < files.length; i++){
IOUtilities.copyDirectory(new File(srcPath, files[i]),
new File(dstPath, files[i]));
}
}
}
else{
if(!srcPath.exists()){
//System.out.println("File or directory does not exist.");
return;
}
else {
InputStream in = null;
OutputStream out = null;
try {
in = new FileInputStream(srcPath);
out = new FileOutputStream(dstPath);
// Transfer bytes from in to out
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
out.flush();
}finally {
try {
if(in!=null) {
in.close();
}
}catch(Throwable t) {
// ignore
}
try {
if(out!=null) {
out.close();
}
}catch(Throwable t) {
// ignore
}
}
}
}
//System.out.println("Directory copied.");
}
public static String readFile(File f) throws Exception{
FileInputStream fis = null;
ByteArrayOutputStream byteInputBuffer = null;
try {
fis = new FileInputStream(f);
byteInputBuffer = new ByteArrayOutputStream();
byte [] readB = new byte[8192];
int readByte = 0;
while((readByte = fis.read(readB))!= -1){
byteInputBuffer.write(readB,0,readByte);
}
byteInputBuffer.flush();
}finally {
try {
if(fis!=null) {
fis.close();
}
}catch(Throwable t) {
// ignore
}
try {
if(byteInputBuffer!=null) {
byteInputBuffer.close();
}
}catch(Throwable t) {
// ignore
}
}
return byteInputBuffer.toString();
}
public static byte[] readBytesFromFile(File f) throws Exception{
FileInputStream fis = null;
ByteArrayOutputStream byteInputBuffer = null;
try {
fis =new FileInputStream(f);
byteInputBuffer = new ByteArrayOutputStream();
byte [] readB = new byte[8192];
int readByte = 0;
while((readByte = fis.read(readB))!= -1){
byteInputBuffer.write(readB,0,readByte);
}
byteInputBuffer.flush();
}finally {
try {
if(fis!=null) {
fis.close();
}
}catch(Throwable t) {
// ignore
}
try {
if(byteInputBuffer!=null) {
byteInputBuffer.close();
}
}catch(Throwable t) {
// ignore
}
}
return byteInputBuffer.toByteArray();
}
public static void writeFile(File f,byte[] contenuto)throws Exception{
FileOutputStream fos = null;
try {
fos = new FileOutputStream(f);
fos.write(contenuto);
fos.flush();
}finally {
try {
if(fos!=null) {
fos.close();
}
}catch(Throwable t) {
// ignore
}
}
}
public static void writeFile(File f,byte[] ... args)throws Exception{
if(args!=null){
FileOutputStream fos = null;
try {
fos = new FileOutputStream(f);
for(int i=0; i<args.length; i++){
fos.write(args[i]);
}
fos.flush();
}finally {
try {
if(fos!=null) {
fos.close();
}
}catch(Throwable t) {
// ignore
}
}
}
}
public static void copyFileAndReplaceAllKeywords(File read,File write,String keyword,String values) throws Exception{
String[]k = new String[1];
k[0] = keyword;
String[]v = new String[1];
v[0] = values;
IOUtilities.copyFileAndReplaceAllKeywords(read, write, k, v);
}
/*public static void copyFileAndReplaceAllKeywords(File read,File write,String[] keyword,String[] values) throws Exception{
String file = IOUtilities.readFile(read);
for(int i=0; i<keyword.length; i++){
while(file.contains(keyword[i])){
file = file.replace(keyword[i], values[i]);
}
}
IOUtilities.writeFile(write, file.getBytes());
}*/
public static void copyFileAndReplaceAllKeywords(File read,File write,String[] keyword,String[] values) throws Exception{
String file = IOUtilities.readFile(read);
for(int i=0; i<keyword.length; i++){
//System.out.println("FILE ["+file+"] contains ["+keyword[i]+"] (value:"+file.indexOf(keyword[i])+")");
int indexOf = file.indexOf(keyword[i]);
while(indexOf>=0){
//System.out.println("REPLACE ["+keyword[i]+"] ["+values[i]+"]");
file = file.replace(keyword[i], values[i]);
indexOf = file.indexOf(keyword[i],indexOf+values[i].length());
//System.out.println("INDEX OF ["+indexOf+"]");
}
}
IOUtilities.writeFile(write, file.getBytes());
}
public static void copyFileAndReplaceKeywords(File read,File write,String keyword,String values) throws Exception{
String[]k = new String[1];
k[0] = keyword;
String[]v = new String[1];
v[0] = values;
IOUtilities.copyFileAndReplaceKeywords(read, write, k, v);
}
public static void copyFileAndReplaceKeywords(File read,File write,String[] keyword,String[] values) throws Exception{
String file = IOUtilities.readFile(read);
for(int i=0; i<keyword.length; i++){
file = file.replace(keyword[i], values[i]);
}
IOUtilities.writeFile(write, file.getBytes());
}
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
String[] children = dir.list();
if(children!=null) {
for (int i=0; i<children.length; i++) {
boolean success = IOUtilities.deleteDir(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
}
// The directory is now empty so now it can be smoked
boolean delete = dir.delete();
return delete;
}
public static void moveToDir(String src,String destDir) throws Exception{
// File (or directory) to be moved
File file = new File(src);
// Destination directory
File dir = new File(destDir);
IOUtilities.moveToDir(file,dir);
}
public static void moveToDir(File src,File destDir) throws Exception{
// Move file to new directory
IOUtilities.copy(src.getAbsolutePath(), destDir.getAbsolutePath()+File.separatorChar+src.getName());
if(src.isDirectory()){
if(IOUtilities.deleteDir(src)==false){
throw new Exception("Directory ["+src.getAbsolutePath()+"] non eliminabile");
}
}else{
if(src.delete()==false){
throw new Exception("File ["+src.getAbsolutePath()+"] non eliminabile");
}
}
}
public static void moveToFile(String src,String destFile)throws Exception{
// File (or directory) to be moved
File file = new File(src);
// Destination directory
File dir = new File(destFile);
IOUtilities.moveToFile(file,dir);
}
public static void moveToFile(File src,File destFile)throws Exception{
// Move file to new directory
IOUtilities.copy(src.getAbsolutePath(), destFile.getAbsolutePath());
if(src.isDirectory()){
if(IOUtilities.deleteDir(src)==false){
throw new Exception("Directory ["+src.getAbsolutePath()+"] non eliminabile");
}
}else{
if(src.delete()==false){
throw new Exception("File ["+src.getAbsolutePath()+"] non eliminabile");
}
}
}
public static void mkdirParentDirectory(String file) throws Exception {
try{
File p = new File(file);
if(p.getParentFile()==null){
return;
}
if(p.getParentFile().exists()){
return;
}
IOUtilities.mkdirParentDirectory(p.getParentFile().getAbsolutePath());
if(p.getParentFile().mkdir()==false){
throw new Exception("Directory ["+p.getParentFile().getAbsolutePath()+"] non esistente e creazione non riuscita");
}
}catch(Exception e){
throw new Exception("mkdirParentDirectory non riuscito: "+e.getMessage(),e);
}
}
}