SuperX-Kernmodul
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

325 lines
10 KiB

package de.memtext.util;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.StringWriter;
import java.net.URL;
import java.net.URLConnection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;
import java.util.zip.CRC32;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* Functionality to add suffixes to filenames and to copy files
*
*/
public class FileUtils {
// don't instantiate
private FileUtils() {
}
/**
* returns how old in minutes
* @param f
* @return
*/
public static int getHowOld(File f)
{
long now=new java.util.Date().getTime();
return (int) ((now-f.lastModified())/(1000*60));
}
/**
* Removes the suffix of a filename
* For example getFileNameWithoutSuffix("test.txt") would return
* test
* @param String filename
* @return
*/
public static String getFileNameWithoutSuffix(String filename) {
int index = filename.indexOf(".");
if (index == -1)
throw new IllegalArgumentException(filename + " doesn't contain .");
filename =filename.substring(0, index);
return filename;
}
/**
* Addes a suffix to a filename before the usual .
* For example addToEndOfFileName("test.txt","1") would return
* test1.txt
* @param String filename
* @param suffix
* @return
*/
public static String addToEndOfFileName(String filename, String suffix) {
int index = filename.indexOf(".");
if (index == -1)
throw new IllegalArgumentException(filename + " doesn't contain .");
filename =
filename.substring(0, index)
+ suffix
+ filename.substring(index, filename.length());
return filename;
}
/**
*
* @param dir - directory to search in
* @param beginning - required beginning of file name, may be null
* @param endings - a single ending like .htm or more .htm|.html
* @return File[] - array only files, no directories are returned
*/
static public File[] getFileList(File dir,String beginning,String endings)
{
FilenamesFilter filt=new FilenamesFilter(null,endings,beginning);
filt.setAllDirsAccepted(false);
return dir.listFiles(filt);
}
/**
* Creates a copy of a file
* @param String source
* @param String target
* @throws Exception
*/
static public void copyFile(String source, String target)
throws IOException {
copyFile(new File(source), new File(target));
}
/**
* Creates a copy of a file
* @param File source
* @param File target
* @throws Exception
*/
static public void copyFile(File source, File target) throws IOException {
FileInputStream is = null;
FileOutputStream os = null;
BufferedInputStream in = null;
BufferedOutputStream out = null;
try {
is = new FileInputStream(source);
os = new FileOutputStream(target);
in = new BufferedInputStream(is);
out = new BufferedOutputStream(os);
int buffer_size = 32768;
byte[] buffer = new byte[buffer_size];
int len = in.read(buffer, 0, buffer_size);
while (len != -1) {
out.write(buffer, 0, len);
len = in.read(buffer, 0, buffer_size);
}
in.close();
is.close();
out.close();
os.close();
} catch (FileNotFoundException fe) {
throw new FileNotFoundException(
"Die Datei " + source + " konnte nicht gefunden werden!");
} catch (IOException e) {
throw new IOException("Couldn't copy file " + e.toString());
}
}
public static void createZipFile(String pathToZipUp, String pathToSaveTo) {
createZipFile(pathToZipUp, "", pathToSaveTo);
}
public static void createZipFile(
String pathToZipUp,
String relPath,
String pathToSaveTo) {
try {
FileOutputStream fos = new FileOutputStream(pathToSaveTo);
ZipOutputStream zos = new ZipOutputStream(fos);
zos.setMethod(ZipOutputStream.DEFLATED);
if (!relPath.equals("")&&pathToZipUp.lastIndexOf("\\") + 1 != pathToZipUp.length())
pathToZipUp += "\\";
System.out.println(pathToZipUp + relPath);
File f = new File(pathToZipUp + relPath);
String[] files = f.list();
if (pathToZipUp.lastIndexOf("\\") + 1 != pathToZipUp.length())
pathToZipUp += "\\";
for (int y = 0; y < files.length; y++) {
//build fully qualified path for each file in directory
//check for / at the end of the path
String fullpath = pathToZipUp;
if (!relPath.equals(""))
fullpath += relPath + "\\";
fullpath += files[y];
File aFile = new File(fullpath);
if (aFile.isDirectory()) {
//recursive call to include all files in the subdirectories
// Vector subDir = new Vector();
// subDir.addElement(fullpath);
if (relPath.equals(""))
relPath = files[y];
else
relPath += "\\" + files[y];
createZipFile(fullpath, relPath, pathToSaveTo);
} else {
byte[] temp = new byte[files[y].length()];
try {
FileInputStream fis = new FileInputStream(aFile);
CRC32 crc32 = new CRC32();
int n;
while ((n = fis.read(temp)) > -1) {
crc32.update(temp, 0, n);
}
fis.close();
String shortName =
files[y].substring(fullpath.length());
ZipEntry ze = new ZipEntry(shortName);
ze.setSize(aFile.length());
ze.setTime(aFile.lastModified());
ze.setCrc(crc32.getValue());
zos.putNextEntry(ze);
fis = new FileInputStream(aFile);
while ((n = fis.read(temp)) > -1) {
zos.write(temp, 0, n);
}
fis.close();
zos.closeEntry();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
} //end for loop
zos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return;
}
public static void main(String a[]) {
List<File> l=getFileList("/home/superx/git/superx/superx/WEB-INF/conf/edustore/db/conf","mo*.xsl,g*.xsl");
for (Iterator<File> it=l.iterator();it.hasNext();)
{
System.out.println(it.next());
}
}
public static void download(URL url,File targetFile) throws IOException {
URLConnection conn = url.openConnection();
InputStream inStream = conn.getInputStream();
FileOutputStream os = new FileOutputStream(targetFile);
BufferedInputStream bufferedInStream = new BufferedInputStream(inStream);
BufferedOutputStream bufferedOutStream = new BufferedOutputStream(os);
int buffer_size = 32768;
byte[] buffer = new byte[buffer_size];
int len = inStream.read(buffer, 0, buffer_size);
while (len != -1) {
bufferedOutStream.write(buffer, 0, len);
len = bufferedInStream.read(buffer, 0, buffer_size);
}
bufferedInStream.close();
inStream.close();
bufferedOutStream.close();
os.close();
}
public static String removeProblemChars(String name) {
String result=name.replace('\\','-');
result=result.replace('/','-');
result=StringUtils.replace(result, " - ", "-");
result=StringUtils.replace(result, " -", "-");
result=StringUtils.replace(result, "- ", "-");
result=result.replace(' ','_');
result=result.replace('*','_');
result=result.replace('?','_');
result=result.replace(',','_');
return result;
}
public static List<File> getFileList(String dir,String regex)
{
List<File> resultFiles=new LinkedList<File>();
File fDir = new File(dir);
File[] files = fDir.listFiles();
StringTokenizer st=new StringTokenizer(regex,",");
while (st.hasMoreTokens())
{
String pattern=st.nextToken();
pattern=pattern.replace(".", "\\."); //escape the dot first
pattern=pattern.replace("?", ".?").replace("*", ".*");
for (File file : files) {
if (file.getName().matches(pattern)) resultFiles.add(file);
}
}
return resultFiles;
}
public static String getFileContentsWithEncoding(String filePath, String encoding) throws FileNotFoundException,IOException {
File f = new File(filePath);
String fileContents = "";
if (encoding == null || encoding.trim().equals("")) {
encoding = System.getProperty("file.encoding");
}
// --- IputStream und OutputStream generieren ---//
FileInputStream fis = new FileInputStream(f);
// Wenn Quelldatei Unicode, dann speziellen Reader nutzen
BufferedReader in;
//BufferedReader ist schneller bei großen Dateien
in = new BufferedReader(new InputStreamReader(fis, encoding));
// --- Output-Stream der temporären Datei erzeugen ---//
StringWriter out = new StringWriter();
// --- Verarbeiten der Datei ---//
String text;
text = in.readLine();
while (text != null) { // Datei nicht leer
out.write(text);
out.write(System.getProperty("line.separator"));
text = in.readLine();
}
if (!(out == null)) {
fileContents = out.toString();
}
return fileContents;
}
}