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
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; |
|
} |
|
|
|
} |