/*******************************************************************************
* Copyright 2011 See AUTHORS file.
*
* 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 com.badlogic.gdx;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.GdxRuntimeException;
/**
* Provides standard access to the filesystem, classpath, Android SD card, and Android assets directory.
*
* @author mzechner
* @author Nathan Sweet
*/
public interface Files {
/**
* Indicates how to resolve a path to a file.
*
* @author mzechner
* @author Nathan Sweet
*/
public enum FileType {
/**
* Path relative to the root of the classpath. Classpath files are always readonly. Note that classpath files
* are not compatible with some functionality on Android, such as {@link Audio#newSound(FileHandle)} and
* {@link Audio#newMusic(FileHandle)}.
*/
Classpath,
/**
* Path relative to the asset directory on Android and to the application's root directory on the desktop. On
* the desktop, if the file is not found, then the classpath is checked. This enables files to be found when
* using JWS or applets. Internal files are always readonly.
*/
Internal,
/**
* Path relative to the root of the SD card on Android and to the home directory of the current user on the
* desktop.
*/
External,
/**
* Path that is a fully qualified, absolute filesystem path. To ensure portability across platforms use absolute
* files only when absolutely (heh) necessary.
*/
Absolute,
/**
* Path relative to the private files directory on Android and to the application's root directory on the
* desktop.
*/
Local;
}
/**
* Returns a handle representing a file or directory.
*
* @param type
* Determines how the path is resolved.
* @throws GdxRuntimeException
* if the type is classpath or internal and the file does not exist.
* @see FileType
*/
public FileHandle getFileHandle(String path, FileType type);
/** Convenience method that returns a {@link FileType#Classpath} file handle. */
public FileHandle classpath(String path);
/** Convenience method that returns a {@link FileType#Internal} file handle. */
public FileHandle internal(String path);
/** Convenience method that returns a {@link FileType#External} file handle. */
public FileHandle external(String path);
/** Convenience method that returns a {@link FileType#Absolute} file handle. */
public FileHandle absolute(String path);
/** Convenience method that returns a {@link FileType#Local} file handle. */
public FileHandle local(String path);
/**
* Returns the external storage path directory. This is the SD card on Android and the home directory of the current
* user on the desktop.
*/
public String getExternalStoragePath();
/**
* Returns true if the external storage is ready for file IO. Eg, on Android, the SD card is not available when
* mounted for use with a PC.
*/
public boolean isExternalStorageAvailable();
/**
* Returns the local storage path directory. This is the private files directory on Android and the directory of the
* jar on the desktop.
*/
public String getLocalStoragePath();
/** Returns true if the local storage is ready for file IO. */
public boolean isLocalStorageAvailable();
}