| /* |
| * Copyright (C) 2009 The Android Open Source Project |
| * |
| * 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. |
| */ |
| |
| import java.util.Collection; |
| import java.util.List; |
| |
| /** |
| * Factory for filesystem commands. |
| */ |
| class Filesystem { |
| |
| public void move(String source, String target) { |
| new Command("mv", source, target).execute(); |
| } |
| |
| /** |
| * Moves all of the files in {@code source} to {@code target}, one at a |
| * time. Unlike {@code move}, this approach works even if the target |
| * directory is nonempty. |
| */ |
| public int moveContents(String source, String target) { |
| return copyContents(true, source, target); |
| } |
| |
| /** |
| * Copies all of the files in {@code source} to {@code target}, one at a |
| * time. Unlike {@code move}, this approach works even if the target |
| * directory is nonempty. |
| */ |
| public int copyContents(String source, String target) { |
| return copyContents(false, source, target); |
| } |
| |
| private int copyContents(boolean move, String source, String target) { |
| List<String> files = new Command("find", source, "-type", "f") .execute(); |
| for (String file : files) { |
| String targetFile = target + "/" + file.substring(source.length()); |
| mkdir(parent(targetFile)); |
| if (move) { |
| new Command("mv", "-i", file, targetFile).execute(); |
| } else { |
| new Command("cp", file, targetFile).execute(); |
| } |
| } |
| return files.size(); |
| } |
| |
| private String parent(String file) { |
| return file.substring(0, file.lastIndexOf('/')); |
| } |
| |
| public void mkdir(String dir) { |
| new Command("mkdir", "-p", dir).execute(); |
| } |
| |
| public List<String> find(String where, String name) { |
| return new Command("find", where, "-name", name).execute(); |
| } |
| |
| public void rm(Collection<String> files) { |
| new Command.Builder().args("rm", "-r").args(files).execute(); |
| } |
| |
| public void rm(String file) { |
| new Command("rm", "-r", file).execute(); |
| } |
| } |