/******************************************************************************* * Copyright 2016 Observational Health Data Sciences and Informatics * * This file is part of WhiteRabbit * * 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 org.ohdsi.utilities; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; public class DirectoryUtilities { public static boolean deleteDir(File dir) { if (dir.isDirectory()) { String[] children = dir.list(); for (int i=0; i<children.length; i++) { boolean success = deleteDir(new File(dir, children[i])); if (!success) { return false; } } } // The directory is now empty so delete it return dir.delete(); } public static void copyDirectory(File sourceLocation , File targetLocation) throws IOException { if (sourceLocation.isDirectory()) { if (!targetLocation.exists()) { targetLocation.mkdir(); } String[] children = sourceLocation.list(); for (int i=0; i<children.length; i++) { copyDirectory(new File(sourceLocation, children[i]), new File(targetLocation, children[i])); } } else { InputStream in = new FileInputStream(sourceLocation); OutputStream out = new FileOutputStream(targetLocation); // Copy the bits from instream to outstream byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.close(); } } public static List<File> getFileListing(File dir) { List<File> result = new ArrayList<File>(); for(String filename: dir.list()) result.add(new File(dir, filename)); return result; } private static List<String> getPathList(File f) { List<String> l = new ArrayList<String>(); File r; r = f.getAbsoluteFile(); while(r != null) { l.add(r.getName()); r = r.getParentFile(); } return l; } private static String matchPathLists(List<String> r,List<String> f) { int i; int j; String s; // start at the beginning of the lists // iterate while both lists are equal s = ""; i = r.size()-1; j = f.size()-1; // first eliminate common root while((i >= 0)&&(j >= 0)&&(r.get(i).equals(f.get(j)))) { i--; j--; } // for each remaining level in the home path, add a .. for(;i>=0;i--) { s += ".." + File.separator; } // for each level in the file path, add the path for(;j>=1;j--) { s += f.get(j) + File.separator; } // file name s += f.get(j); return s; } public static String getRelativePath(File home,File f){ return matchPathLists(getPathList(home),getPathList(f)); } }