/*
* Copyright 2015 the original author or authors.
* @https://github.com/scouter-project/scouter
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package scouter.util;
import scouter.io.DataInputX;
import scouter.io.DataOutputX;
import java.io.*;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.channels.FileChannel;
import java.util.Properties;
public class FileUtil {
public static DatagramSocket close(DatagramSocket udp){
try {
if (udp != null) {
udp.close();
}
} catch (Throwable e) {
}
return null;
}
public static InputStream close(InputStream in) {
try {
if (in != null) {
in.close();
}
} catch (Throwable e) {
}
return null;
}
public static OutputStream close(OutputStream out) {
try {
if (out != null) {
out.close();
}
} catch (Throwable e) {
}
return null;
}
public static Reader close(Reader in) {
try {
if (in != null) {
in.close();
}
} catch (Throwable e) {
}
return null;
}
public static Writer close(Writer out) {
try {
if (out != null) {
out.close();
}
} catch (Throwable e) {
}
return null;
}
public static byte[] readAll(InputStream fin) throws IOException {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buff = new byte[4096];
int n = fin.read(buff);
while (n >= 0) {
out.write(buff, 0, n);
n = fin.read(buff);
}
return out.toByteArray();
}
public static IClose close(IClose object) {
try {
if (object != null) {
object.close();
}
} catch (Throwable e) {
e.printStackTrace();
}
return null;
}
public static RandomAccessFile close(RandomAccessFile raf) {
try {
if (raf != null) {
raf.close();
}
} catch (Throwable e) {
}
return null;
}
public static Socket close(Socket socket) {
try {
if (socket != null) {
socket.close();
}
} catch (Throwable e) {
}
return null;
}
public static ServerSocket close(ServerSocket socket) {
try {
if (socket != null) {
socket.close();
}
} catch (Throwable e) {
}
return null;
}
public static void save(String file, byte[] b) {
save(new File(file), b);
}
public static void save(File file, byte[] byteArray) {
FileOutputStream out = null;
try {
out = new FileOutputStream(file);
out.write(byteArray);
} catch (Exception e) {
}
close(out);
}
public static byte[] readAll(File file) {
FileInputStream in = null;
try {
in = new FileInputStream(file);
return readAll(in);
} catch (Exception e) {
} finally {
close(in);
}
return null;
}
public static void copy(File src, File dest) {
try {
copy(src, dest, true);
} catch (Exception e) {
}
}
public static boolean copy(File src, File dest, boolean overwrite) throws IOException {
if (!src.isFile() || !src.exists())
return false;
if (dest.exists()) {
if (dest.isDirectory()) // Directory이면 src파일명을 사용한다.
dest = new File(dest, src.getName());
else if (dest.isFile()) {
if (!overwrite)
throw new IOException(dest.getAbsolutePath() + "' already exists!");
} else
throw new IOException("Invalid file '" + dest.getAbsolutePath() + "'");
}
File destDir = dest.getParentFile();
if (!destDir.exists())
if (!destDir.mkdirs())
throw new IOException("Failed to create " + destDir.getAbsolutePath());
long fileSize = src.length();
if (fileSize > 20 * 1024 * 1024) {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream(src);
out = new FileOutputStream(dest);
int done = 0;
int buffLen = 32768;
byte buf[] = new byte[buffLen];
while ((done = in.read(buf, 0, buffLen)) >= 0) {
if (done == 0)
Thread.yield();
else
out.write(buf, 0, done);
}
} finally {
close(in);
close(out);
}
} else {
FileInputStream in = null;
FileOutputStream out = null;
FileChannel fin = null;
FileChannel fout = null;
try {
in = new FileInputStream(src);
out = new FileOutputStream(dest);
fin = in.getChannel();
fout = out.getChannel();
long position = 0;
long done = 0;
long count = Math.min(65536, fileSize);
do {
done = fin.transferTo(position, count, fout);
position += done;
fileSize -= done;
} while (fileSize > 0);
} finally {
close(fin);
close(fout);
close(in);
close(out);
}
}
return true;
}
public static FileChannel close(FileChannel fc) {
if (fc != null) {
try {
fc.close();
} catch (IOException e) {
}
}
return null;
}
public static String getJarLocation(Class class1) {
try {
String path = "" + class1.getResource("/" + class1.getName().replace('.', '/') + ".class");
if (path.indexOf("!") < 0)
return null;
path = path.substring("jar:file:".length(), path.indexOf("!"));
path = path.substring(0, path.lastIndexOf('/'));
return new File(path).getAbsolutePath();
} catch (Exception e) {
}
return null;
}
public static String getJarFileName(Class class1) {
try {
String path = "" + class1.getResource("/" + class1.getName().replace('.', '/') + ".class");
if (path.indexOf("!") < 0)
return null;
path = path.substring("jar:file:".length(), path.indexOf("!"));
return new File(path).getAbsolutePath();
} catch (Exception e) {
}
return null;
}
public static void main(String[] args) throws IOException {
String path = getJarLocation(FileUtil.class);
System.out.println(path);
new File(path, "test.txt").createNewFile();
System.out.println(new File(path).canWrite());
System.out.println(new File(path).getAbsolutePath());
}
// public static void chmod777(File file) {
// try {
// file.setReadable(true, false);
// file.setWritable(true, false);
// file.setExecutable(true, false);
// } catch (Throwable th) {}
// }
public static void close(DataInputX in) {
try {
in.close();
} catch (Exception e) {
}
}
public static void close(DataOutputX out) {
try {
out.close();
} catch (Exception e) {
}
}
public static String load(File file, String enc) {
if (file == null || file.canRead() == false)
return null;
BufferedInputStream in = null;
try {
in = new BufferedInputStream(new FileInputStream(file));
return new String(readAll(in), enc);
} catch (IOException e) {
e.printStackTrace();
} finally {
close(in);
}
return null;
}
public static void append(String file, String line) {
PrintWriter out = null;
try {
out = new PrintWriter(new FileWriter(file, true));
out.println(line);
} catch (Exception e) {
}
close(out);
}
public static boolean mkdirs(String path) {
File f = new File(path);
if (f.exists() == false)
return f.mkdirs();
else
return true;
}
public static Properties readProperties(File f) {
BufferedInputStream reader = null;
Properties p = new Properties();
try {
reader = new BufferedInputStream(new FileInputStream(f));
p.load(reader);
} catch (Exception e) {
} finally {
close(reader);
}
return p;
}
public static void writeProperties(File f, Properties p) {
PrintWriter pw = null;
try {
pw = new PrintWriter(f);
p.list(pw);
} catch (Exception e) {
} finally {
close(pw);
}
}
}