Java tutorial
//package com.java2s; /* * Copyright (C) 2012 The Android Open Source Project * Copyright (C) 2009-2013 University of Washington * * 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.io.File; import java.util.ArrayList; import android.os.Environment; public class Main { private static final String ODK_FOLDER_NAME = "opendatakit"; private static final String CONFIG_FOLDER_NAME = "config"; public static String asConfigRelativePath(String appName, File fileUnderAppConfigName) { String relativePath = asRelativePath(appName, fileUnderAppConfigName); if (!relativePath.startsWith(CONFIG_FOLDER_NAME + File.separator)) { throw new IllegalArgumentException("File is not located under config folder"); } relativePath = relativePath.substring(CONFIG_FOLDER_NAME.length() + File.separator.length()); if (relativePath.contains(File.separator + "..")) { throw new IllegalArgumentException("File contains " + File.separator + ".."); } return relativePath; } /** * Returns the relative path beginning after the getAppFolder(appName) directory. * The relative path does not start or end with a '/' * * @param appName * @param fileUnderAppName * @return */ public static String asRelativePath(String appName, File fileUnderAppName) { // convert fileUnderAppName to a relative path such that if // we just append it to the AppFolder, we have a full path. File parentDir = new File(getAppFolder(appName)); ArrayList<String> pathElements = new ArrayList<String>(); File f = fileUnderAppName; while (f != null && !f.equals(parentDir)) { pathElements.add(f.getName()); f = f.getParentFile(); } if (f == null) { throw new IllegalArgumentException("file is not located under this appName (" + appName + ")!"); } StringBuilder b = new StringBuilder(); for (int i = pathElements.size() - 1; i >= 0; --i) { String element = pathElements.get(i); b.append(element); if (i != 0) { b.append(File.separator); } } return b.toString(); } public static String getAppFolder(String appName) { String path = getOdkFolder() + File.separator + appName; return path; } public static String getOdkFolder() { String path = Environment.getExternalStorageDirectory() + File.separator + ODK_FOLDER_NAME; return path; } }