blob: 9e5abf56a7ee04c28a2d4b95de47a3e10511fef6 [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 utils;
import java.io.*;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import java.util.StringTokenizer;
import java.util.Vector;
/**
* User: dschaffer
* Date: Mar 8, 2005
* Time: 11:21:03 AM
*/
public class FileUtils {
public static String normalizeDir(String dir) {
if (dir==null) dir=".";
try {
dir=new File(dir).getCanonicalPath();
} catch (IOException e) {
}
dir=dir.replace('\\','/');
if (dir.endsWith("/" ) || dir.endsWith("\\")) {
dir=dir.substring(0,dir.length()-1);
}
return dir;
}
public static String normalizeDirOS(String dir) {
if (dir==null) dir=".";
try {
dir=new File(dir).getCanonicalPath();
} catch (IOException e) {
}
dir=dir.replace('\\',File.separatorChar);
dir=dir.replace('/',File.separatorChar);
if (dir.endsWith("/" ) || dir.endsWith("\\")) {
dir=dir.substring(0,dir.length()-1);
}
return dir;
}
public static String get8Dot3Path(String path) {
path = normalizeDir(path);
StringTokenizer tokenizer = new StringTokenizer(path, "/");
String newPath = "";
while (tokenizer.hasMoreElements()) {
String currentToken = (String)tokenizer.nextElement();
int indexOfDot = currentToken.indexOf(".");
String beforeDot = indexOfDot > 0? currentToken.substring(0, indexOfDot ) : currentToken;
String afterDot = indexOfDot > 0? currentToken.substring(indexOfDot) : "/";
if (beforeDot.length() <= 8) {
newPath += beforeDot + afterDot;
} else {
newPath += beforeDot.substring(0, 6) + "~1" + afterDot;
}
}
if (newPath.substring(newPath.length()).equals("/"))
newPath = newPath.substring(0, newPath.length() - 1);
return newPath;
}
public static String getDirectory(String file) {
file=file.replace('\\',File.separatorChar);
file=file.replace('/',File.separatorChar);
String dir=file.substring(0,file.lastIndexOf(File.separatorChar));
return dir;
}
public static String getFile(String file) {
file=file.replace('\\',File.separatorChar);
file=file.replace('/',File.separatorChar);
String dir=file.substring(file.lastIndexOf(File.separatorChar)+1);
return dir;
}
public static void writeFile(String name,String contents) throws Exception {
BufferedWriter bw=new BufferedWriter(new FileWriter(name));
bw.write(contents);
bw.flush();
bw.close();
}
public static void writeFileUTF(String name,String contents) throws Exception {
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(new FileOutputStream(name), "UTF-8"));
bw.write(contents);
bw.flush();
bw.close();
}
public static void writeBinaryFile(String name,String fromName) throws Exception {
byte byteArr[]=new byte[8192];
String contents="";
FileInputStream fin=new FileInputStream(fromName);
FileOutputStream fos=new FileOutputStream(name);
int len;
while ((len=fin.read(byteArr, 0, 8192))!=-1) {
fos.write(byteArr);
}
fin.close();
fos.close();
}
public static String readFile(String name) throws Exception {
char ch[]=new char[8192];
String contents="";
BufferedReader br=new BufferedReader(new FileReader(name));
int len;
while ((len=br.read(ch,0,8192))!=-1) {
contents+=new String(ch,0,len);
}
br.close();
return contents;
}
public static String readFileUTF(String name) throws Exception {
char ch[]=new char[8192];
String contents="";
BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(name), "UTF-8"));
int len;
while ((len=br.read(ch,0,8192))!=-1) {
contents+=new String(ch,0,len);
}
br.close();
return contents;
}
public static List readLines(String name) throws Exception {
String contents=readFile(name);
List lines=new Vector();
while (contents.indexOf("\n")>-1) {
String line=contents.substring(0,contents.indexOf("\n"));
contents=contents.substring(contents.indexOf("\n")+1);
line=line.trim();
lines.add(line);
}
if (contents.length()>0) {
lines.add(contents);
}
return lines;
}
public static void copyFile(String fromFile,String toFile) throws Exception {
if (new File(toFile).exists()==true) {
new File(toFile).delete();
}
writeFile(toFile,readFile(fromFile));
}
public static void copyBinaryFile(String fromFile,String toFile) throws Exception {
if (new File(toFile).exists()==true) {
new File(toFile).delete();
}
writeBinaryFile(toFile, fromFile);
}
public static void copyDir(String dir,String todir) throws Exception {
if (new File(todir).exists()==false) {
new File(todir).mkdirs();
}
File d = new File(dir);
if (!d.isDirectory())
{
System.err.println("warning: " + dir + " is not a directory");
return;
}
File files[]=d.listFiles();
if (files != null)
{
for (int i=0;i<files.length;i++) {
if (files[i].isDirectory()) {
copyDir(files[i].toString(),todir+"/"+getFile(files[i].toString()));
} else {
copyFile(files[i].toString(),todir+"/"+getFile(files[i].toString()));
}
}
}
}
public static void copyBinaryDir(String dir,String todir) throws Exception {
if (new File(todir).exists()==false) {
new File(todir).mkdirs();
}
File d = new File(dir);
if (!d.isDirectory())
{
System.err.println("warning: " + dir + " is not a directory");
return;
}
File files[]=d.listFiles();
if (files != null)
{
for (int i=0;i<files.length;i++) {
if (files[i].isDirectory()) {
copyBinaryDir(files[i].toString(),todir+"/"+getFile(files[i].toString()));
} else {
copyBinaryFile(files[i].toString(),todir+"/"+getFile(files[i].toString()));
}
}
}
}
public static void deleteFile(String name){
if (new File(name).exists())
new File(name).delete();
}
/**
* Deletes a file or directory and all of its contents.
**/
public static void recursivelyDelete(String name){
File curFile = new File(name);
File subFile = null;
int i = 0;
try{
if (curFile.exists()){
if(curFile.isDirectory()){
String[] arrFiles = curFile.list();
for(i = 0; i < Array.getLength(arrFiles); ++i){
subFile = new File(curFile + File.separator + arrFiles[i]);
recursivelyDelete(subFile.getCanonicalPath());
}
}
// Now we have a file or an empty dir we can delete.
if( !curFile.delete() ){
//System.out.println("Could not delete " + curFile.getCanonicalPath() + ".");
}
}
}catch(Exception e){
e.printStackTrace();
}
}
public static String convertCygwinPath(String file) {
if (file.startsWith("\"")) file=file.substring(1);
if (file.endsWith("\"")) file=file.substring(0,file.length()-1);
if (new File(file).exists())
return file;
if (file.startsWith("/cygdrive"))
file=file.substring(9);
if (file.startsWith("/") && file.substring(2,3).equals("/")) {
file=file.substring(1,2)+":"+file.substring(2);
}
return file;
}
public static boolean getResult(String file) {
boolean result=true;
try {
String s=readFile(file);
if (s.indexOf("false")>-1) {
result=false;
}
} catch (Exception e) {
}
return result;
}
public static boolean getResult() {
return getResult(System.getProperty("basedir","."));
}
public static void updateResult(boolean bool) {
updateResult(System.getProperty("basedir",".")+"/testresults.properties",bool);
}
public static void updateResult(String file,boolean bool) {
System.out.println("testresults "+(bool? "PASSED":"FAILED")+" writing to "+file);
boolean result=getResult(file);
try {
writeFile(file,"result="+(result&bool));
} catch (Exception e) {
e.printStackTrace();
}
}
public static String removeCommentsFromFile(String content) {
content = Pattern.compile("/\\*.*?\\*/", Pattern.DOTALL).matcher(content).replaceAll("");
content = content.replaceAll("//.*", "");
return content;
}
public static void main(String[] args) {
get8Dot3Path("c:\\program files\\internet explorer\\iexplore.exe");
}
/**
* Returns all files (no directories) found in and below rootDir, with the given
* filter.
**/
public static ArrayList listFilesRecursively( File rootDir, FilenameFilter filter ){
ArrayList list = new ArrayList();
File[] files = rootDir.listFiles( filter );
for( int i = 0; i < Array.getLength( files ); ++i ){
if( files[i].isFile() ){
list.add( files[i] );
}else if( files[i].isDirectory() ){
list.addAll( listFilesRecursively( files[i], filter ) );
}
}
return list;
}
/**
* Returns all top level directories and files (no sub directories) found in and below rootDir and
* swfdir, with the given filter. Note that filter does not work in sub directories.
**/
public static ArrayList listTopLevelDirectoriesAndFiles( File rootDir, FilenameFilter filter ){
ArrayList list = new ArrayList();
File[] files = rootDir.listFiles( filter );
for( int i = 0; i < Array.getLength( files ); ++i ){
try {
String filePath = files[i].getCanonicalPath().toLowerCase();
if (filePath.endsWith(File.separator + "swfs") == false) {
list.add( files[i] );
}
else
{
list.addAll(listTopLevelDirectoriesAndFiles(files[i], filter));
}
} catch (IOException e) {
e.printStackTrace();
}
}
return list;
}
}