Package com.biglybt.core.util
Class FileUtil
- java.lang.Object
-
- com.biglybt.core.util.FileUtil
-
public class FileUtil extends java.lang.Object
File utility class.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FileUtil.FileHack
static class
FileUtil.FileHandlerHack
static interface
FileUtil.ProgressListener
-
Field Summary
Fields Modifier and Type Field Description private static char[]
char_conversion_mapping
private static AEMonitor
class_mon
static java.lang.String
DIR_SEP
private static AEDiagnosticsLogger
file_logger
private static FileHandler
fileHandling
private static boolean
first_reservation
private static boolean
is_my_lock_file
private static LogIDs
LOGID
private static java.lang.reflect.Method
mPath_getFileStore
private static java.lang.reflect.Method
mToPath
private static AsyncDispatcher
recycler
private static java.lang.reflect.Method
reflectOnUsableSpace
private static int
RESERVED_FILE_HANDLE_COUNT
private static java.util.List
reserved_file_handles
private static boolean
sce_checked
Gets the encoding that should be used when writing script files (currently only tested for windows as this is where an issue can arise...) We also only test based on the user-data directory name to see if an explicit encoding switch is requried...private static java.lang.String
script_encoding
private static java.lang.ThreadLocal<IdentityHashSet<CoreOperationTask>>
tls
-
Constructor Summary
Constructors Constructor Description FileUtil()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static boolean
areFilePathsIdentical(java.io.File f1, java.io.File f2)
static void
backupFile(java.io.File _file, boolean _make_copy)
Backup the given file to filename.bak, removing the old .bak file if necessary.static void
backupFile(java.lang.String _filename, boolean _make_copy)
Backup the given file to filename.bak, removing the old .bak file if necessary.static java.io.File
canonise(java.io.File file)
static boolean
canReallyWriteToAppDirectory()
static boolean
canWriteToDirectory(java.io.File dir)
static boolean
containsPathSegment(java.io.File f, java.lang.String path, boolean caseSensitive)
static java.lang.String
convertOSSpecificChars(java.lang.String file_name_in, boolean is_folder)
static boolean
copyFile(java.io.File _source, java.io.File _dest)
static boolean
copyFile(java.io.File _source, java.io.OutputStream _dest, boolean closeInputStream)
static void
copyFile(java.io.InputStream _source, java.io.File _dest)
copys the input stream to the file.static void
copyFile(java.io.InputStream _source, java.io.File _dest, boolean _close_input_stream)
static void
copyFile(java.io.InputStream is, java.io.OutputStream os)
static void
copyFile(java.io.InputStream is, java.io.OutputStream os, boolean closeInputStream)
static void
copyFileOrDirectory(java.io.File from_file_or_dir, java.io.File to_parent_dir)
static boolean
copyFileWithDates(java.io.File from_file, java.io.File to_file)
Copy the given source file to the given destination file.static void
copyFileWithException(java.io.File _source, java.io.File _dest)
static void
deleteResilientConfigFile(java.lang.String name)
static void
deleteResilientFile(java.io.File file)
static boolean
deleteWithRecycle(java.io.File file, boolean force_no_recycle)
static java.io.File
getApplicationFile(java.lang.String filename)
Get a file relative to this program's install directory.static java.lang.String
getCanonicalFileName(java.lang.String filename)
static java.io.File
getCanonicalFileSafe(java.io.File file)
Preserves the case of the file.name when the file exists but differs in casestatic java.lang.String
getCanonicalPathSafe(java.io.File file)
Preserves the case of the file.name when the file exists but differs in casestatic java.lang.String
getExtension(java.lang.String fName)
Gets the extension of a file name, ensuring we don't go into the pathstatic java.io.File
getFileOrBackup(java.lang.String _filename)
Returns the file handle for the given filename or it's equivalent .bak backup file if the original doesn't exist or is 0-sized.static long
getFileOrDirectorySize(java.io.File file)
static java.lang.Object
getFileStore(java.io.File file)
static java.lang.String[]
getFileStoreNames(java.io.File... files)
static java.io.File
getJarFileFromClass(java.lang.Class cla)
static java.io.File
getJarFileFromURL(java.lang.String url_str)
static java.lang.String
getRelativePath(java.io.File parentDir, java.io.File file)
private static void
getReservedFileHandles()
static java.lang.String
getScriptCharsetEncoding()
static long
getUsableSpace(java.io.File f)
static boolean
getUsableSpaceSupported()
static java.io.File
getUserFile(java.lang.String filename)
static boolean
hasTask(DownloadManager dm)
static boolean
isAncestorOf(java.io.File _parent, java.io.File _child)
static boolean
isMyFileLock()
static void
log(java.lang.String str)
static void
log(java.lang.String str, java.lang.Throwable error)
static boolean
mkdirs(java.io.File f)
Makes Directories as long as the directory isn't directly in Volumes (OSX)static java.io.File
newFile(java.io.File parent_file, java.lang.String... subDirs)
static java.io.File
newFile(java.lang.String parent, java.lang.String... subDirs)
static java.io.File
newFile(java.net.URI uri)
static FMFileAccess.FileAccessor
newFileAccessor(java.io.File file, java.lang.String access_mode)
static java.io.FileInputStream
newFileInputStream(java.io.File from_file)
static java.io.FileOutputStream
newFileOutputStream(java.io.File file)
static java.io.FileOutputStream
newFileOutputStream(java.io.File file, boolean append)
static byte[]
readFileAsByteArray(java.io.File file)
static java.lang.String
readFileAsString(java.io.File file, int size_limit)
static java.lang.String
readFileAsString(java.io.File file, int size_limit, java.lang.String charset)
static java.lang.String
readFileEndAsString(java.io.File file, int size_limit, java.lang.String charset)
static java.lang.String
readGZippedFileAsString(java.io.File file, int size_limit)
static byte[]
readInputStreamAsByteArray(java.io.InputStream is)
static byte[]
readInputStreamAsByteArray(java.io.InputStream is, int size_limit)
static java.lang.String
readInputStreamAsString(java.io.InputStream is, int size_limit)
static java.lang.String
readInputStreamAsString(java.io.InputStream is, int size_limit, int timeoutMillis, java.lang.String charSet)
static java.lang.String
readInputStreamAsString(java.io.InputStream is, int size_limit, java.lang.String charSet)
static java.lang.String
readInputStreamAsStringWithTruncation(java.io.InputStream is, int size_limit)
static java.util.Map
readResilientConfigFile(java.lang.String file_name)
static java.util.Map
readResilientConfigFile(java.lang.String file_name, boolean use_backups)
static java.util.Map
readResilientFile(java.io.File file)
static java.util.Map
readResilientFile(java.io.File parent_dir, java.lang.String file_name, boolean use_backup)
static java.util.Map
readResilientFile(java.io.File parent_dir, java.lang.String file_name, boolean use_backup, boolean intern_keys)
private static java.util.Map
readResilientFile(java.lang.String original_file_name, java.io.File parent_dir, java.lang.String file_name, int fail_count, boolean recovery_mode, boolean skip_key_intern)
private static java.util.Map
readResilientFileSupport(java.io.File parent_dir, java.lang.String file_name, boolean attempt_recovery, boolean intern_keys)
private static boolean
reallyCopyFile(java.io.File from_file, java.io.File to_file, FileUtil.ProgressListener pl)
static boolean
reallyExists(java.io.File file)
Verifies the case of the file.namestatic boolean
recursiveDelete(java.io.File f)
Deletes the given dir and all files/dirs underneathstatic boolean
recursiveDeleteNoCheck(java.io.File f)
protected static void
recursiveEmptyDirDelete(java.io.File f, java.util.Set ignore_set, boolean log_warnings)
private static void
releaseReservedFileHandles()
static boolean
renameFile(java.io.File from_file, java.io.File to_file)
static boolean
renameFile(java.io.File from_file, java.io.File to_file, boolean fail_on_existing_directory)
static boolean
renameFile(java.io.File from_file, java.io.File to_file, boolean fail_on_existing_directory, java.io.FileFilter file_filter, FileUtil.ProgressListener pl)
static boolean
renameFile(java.io.File from_file, java.io.File to_file, FileUtil.ProgressListener pl)
private static boolean
renameFileSupport(java.io.File from_file, java.io.File to_file, boolean fail_on_existing_directory, java.io.FileFilter file_filter, FileUtil.ProgressListener pl)
static boolean
resilientConfigFileExists(java.lang.String name)
static void
runAsTask(int op_type, CoreOperationTask task)
static void
runAsTask(CoreOperationTask task)
static java.lang.String
translateMoveFilePath(java.lang.String old_root, java.lang.String new_root, java.lang.String file_to_move)
static void
writeBytesAsFile(java.lang.String filename, byte[] file_data)
static boolean
writeBytesAsFile2(java.lang.String filename, byte[] file_data)
static void
writeResilientConfigFile(java.lang.String file_name, java.util.Map data)
private static boolean
writeResilientFile(java.io.File parent_dir, java.lang.String file_name, java.util.Map data)
static void
writeResilientFile(java.io.File parent_dir, java.lang.String file_name, java.util.Map data, boolean use_backup)
static void
writeResilientFile(java.io.File parent_dir, java.lang.String file_name, java.util.Map data, boolean use_backup, boolean copy_to_backup)
static void
writeResilientFile(java.io.File file, java.util.Map data)
static boolean
writeResilientFileWithResult(java.io.File parent_dir, java.lang.String file_name, java.util.Map data)
static boolean
writeStringAsFile(java.io.File file, java.lang.String text)
static boolean
writeStringAsFile(java.io.File file, java.lang.String text, java.lang.String charset)
-
-
-
Field Detail
-
LOGID
private static final LogIDs LOGID
-
DIR_SEP
public static final java.lang.String DIR_SEP
-
RESERVED_FILE_HANDLE_COUNT
private static final int RESERVED_FILE_HANDLE_COUNT
- See Also:
- Constant Field Values
-
first_reservation
private static boolean first_reservation
-
is_my_lock_file
private static boolean is_my_lock_file
-
reserved_file_handles
private static final java.util.List reserved_file_handles
-
class_mon
private static final AEMonitor class_mon
-
reflectOnUsableSpace
private static final java.lang.reflect.Method reflectOnUsableSpace
-
mPath_getFileStore
private static final java.lang.reflect.Method mPath_getFileStore
-
mToPath
private static final java.lang.reflect.Method mToPath
-
char_conversion_mapping
private static char[] char_conversion_mapping
-
fileHandling
private static final FileHandler fileHandling
-
file_logger
private static AEDiagnosticsLogger file_logger
-
tls
private static final java.lang.ThreadLocal<IdentityHashSet<CoreOperationTask>> tls
-
recycler
private static AsyncDispatcher recycler
-
sce_checked
private static boolean sce_checked
Gets the encoding that should be used when writing script files (currently only tested for windows as this is where an issue can arise...) We also only test based on the user-data directory name to see if an explicit encoding switch is requried...
-
script_encoding
private static java.lang.String script_encoding
-
-
Method Detail
-
areFilePathsIdentical
public static boolean areFilePathsIdentical(java.io.File f1, java.io.File f2)
-
reallyExists
public static boolean reallyExists(java.io.File file)
Verifies the case of the file.name- Parameters:
file
-- Returns:
-
getCanonicalFileSafe
public static java.io.File getCanonicalFileSafe(java.io.File file)
Preserves the case of the file.name when the file exists but differs in case- Parameters:
file
-- Returns:
-
getCanonicalPathSafe
public static java.lang.String getCanonicalPathSafe(java.io.File file)
Preserves the case of the file.name when the file exists but differs in case- Parameters:
file
-- Returns:
-
isAncestorOf
public static boolean isAncestorOf(java.io.File _parent, java.io.File _child)
-
canonise
public static java.io.File canonise(java.io.File file)
-
getCanonicalFileName
public static java.lang.String getCanonicalFileName(java.lang.String filename)
-
getUserFile
public static java.io.File getUserFile(java.lang.String filename)
-
getApplicationFile
public static java.io.File getApplicationFile(java.lang.String filename)
Get a file relative to this program's install directory.On Windows, this is usually %Program Files%\[AppName]\[filename]
On *nix, this is usually the [Launch Dir]/[filename]
On Mac, this is usually "/Applications/.[AppName]/[filename]"
-
recursiveDelete
public static boolean recursiveDelete(java.io.File f)
Deletes the given dir and all files/dirs underneath
-
recursiveDeleteNoCheck
public static boolean recursiveDeleteNoCheck(java.io.File f)
-
getFileOrDirectorySize
public static long getFileOrDirectorySize(java.io.File file)
-
recursiveEmptyDirDelete
protected static void recursiveEmptyDirDelete(java.io.File f, java.util.Set ignore_set, boolean log_warnings)
-
convertOSSpecificChars
public static java.lang.String convertOSSpecificChars(java.lang.String file_name_in, boolean is_folder)
-
writeResilientConfigFile
public static void writeResilientConfigFile(java.lang.String file_name, java.util.Map data)
-
writeResilientFile
public static void writeResilientFile(java.io.File file, java.util.Map data)
-
writeResilientFileWithResult
public static boolean writeResilientFileWithResult(java.io.File parent_dir, java.lang.String file_name, java.util.Map data)
-
writeResilientFile
public static void writeResilientFile(java.io.File parent_dir, java.lang.String file_name, java.util.Map data, boolean use_backup)
-
writeResilientFile
public static void writeResilientFile(java.io.File parent_dir, java.lang.String file_name, java.util.Map data, boolean use_backup, boolean copy_to_backup)
-
writeResilientFile
private static boolean writeResilientFile(java.io.File parent_dir, java.lang.String file_name, java.util.Map data)
-
resilientConfigFileExists
public static boolean resilientConfigFileExists(java.lang.String name)
-
readResilientConfigFile
public static java.util.Map readResilientConfigFile(java.lang.String file_name)
- Returns:
- Map read from config file, or empty HashMap if error
-
readResilientConfigFile
public static java.util.Map readResilientConfigFile(java.lang.String file_name, boolean use_backups)
- Returns:
- Map read from config file, or empty HashMap if error
-
readResilientFile
public static java.util.Map readResilientFile(java.io.File file)
- Returns:
- Map read from config file, or empty HashMap if error
-
readResilientFile
public static java.util.Map readResilientFile(java.io.File parent_dir, java.lang.String file_name, boolean use_backup)
- Returns:
- Map read from config file, or empty HashMap if error
-
readResilientFile
public static java.util.Map readResilientFile(java.io.File parent_dir, java.lang.String file_name, boolean use_backup, boolean intern_keys)
- Parameters:
parent_dir
-file_name
-use_backup
-intern_keys
-- Returns:
- Map read from config file, or empty HashMap if error
-
readResilientFileSupport
private static java.util.Map readResilientFileSupport(java.io.File parent_dir, java.lang.String file_name, boolean attempt_recovery, boolean intern_keys)
-
readResilientFile
private static java.util.Map readResilientFile(java.lang.String original_file_name, java.io.File parent_dir, java.lang.String file_name, int fail_count, boolean recovery_mode, boolean skip_key_intern)
-
deleteResilientFile
public static void deleteResilientFile(java.io.File file)
-
deleteResilientConfigFile
public static void deleteResilientConfigFile(java.lang.String name)
-
getReservedFileHandles
private static void getReservedFileHandles()
-
releaseReservedFileHandles
private static void releaseReservedFileHandles()
-
isMyFileLock
public static boolean isMyFileLock()
-
backupFile
public static void backupFile(java.lang.String _filename, boolean _make_copy)
Backup the given file to filename.bak, removing the old .bak file if necessary. If _make_copy is true, the original file will copied to backup, rather than moved.- Parameters:
_filename
- name of file to backup_make_copy
- copy instead of move
-
backupFile
public static void backupFile(java.io.File _file, boolean _make_copy)
Backup the given file to filename.bak, removing the old .bak file if necessary. If _make_copy is true, the original file will copied to backup, rather than moved.- Parameters:
_file
- file to backup_make_copy
- copy instead of move
-
copyFileWithDates
public static boolean copyFileWithDates(java.io.File from_file, java.io.File to_file)
Copy the given source file to the given destination file. Returns file copy success or not.- Parameters:
_source
- source file_dest
- destination file- Returns:
- true if file copy successful, false if copy failed
-
copyFile
public static boolean copyFile(java.io.File _source, java.io.File _dest)
-
copyFileWithException
public static void copyFileWithException(java.io.File _source, java.io.File _dest) throws java.io.IOException
- Throws:
java.io.IOException
-
copyFile
public static boolean copyFile(java.io.File _source, java.io.OutputStream _dest, boolean closeInputStream)
-
copyFile
public static void copyFile(java.io.InputStream _source, java.io.File _dest) throws java.io.IOException
copys the input stream to the file. always closes the input stream- Parameters:
_source
-_dest
-- Throws:
java.io.IOException
-
copyFile
public static void copyFile(java.io.InputStream _source, java.io.File _dest, boolean _close_input_stream) throws java.io.IOException
- Throws:
java.io.IOException
-
copyFile
public static void copyFile(java.io.InputStream is, java.io.OutputStream os) throws java.io.IOException
- Throws:
java.io.IOException
-
copyFile
public static void copyFile(java.io.InputStream is, java.io.OutputStream os, boolean closeInputStream) throws java.io.IOException
- Throws:
java.io.IOException
-
copyFileOrDirectory
public static void copyFileOrDirectory(java.io.File from_file_or_dir, java.io.File to_parent_dir) throws java.io.IOException
- Throws:
java.io.IOException
-
getFileOrBackup
public static java.io.File getFileOrBackup(java.lang.String _filename)
Returns the file handle for the given filename or it's equivalent .bak backup file if the original doesn't exist or is 0-sized. If neither the original nor the backup are available, a null handle is returned.- Parameters:
_filename
- root name of file- Returns:
- file if successful, null if failed
-
getJarFileFromClass
public static java.io.File getJarFileFromClass(java.lang.Class cla)
-
getJarFileFromURL
public static java.io.File getJarFileFromURL(java.lang.String url_str)
-
renameFile
public static boolean renameFile(java.io.File from_file, java.io.File to_file)
-
renameFile
public static boolean renameFile(java.io.File from_file, java.io.File to_file, FileUtil.ProgressListener pl)
-
renameFile
public static boolean renameFile(java.io.File from_file, java.io.File to_file, boolean fail_on_existing_directory)
-
renameFile
public static boolean renameFile(java.io.File from_file, java.io.File to_file, boolean fail_on_existing_directory, java.io.FileFilter file_filter, FileUtil.ProgressListener pl)
-
renameFileSupport
private static boolean renameFileSupport(java.io.File from_file, java.io.File to_file, boolean fail_on_existing_directory, java.io.FileFilter file_filter, FileUtil.ProgressListener pl)
-
getFileStore
public static java.lang.Object getFileStore(java.io.File file)
-
getFileStoreNames
public static java.lang.String[] getFileStoreNames(java.io.File... files)
-
reallyCopyFile
private static boolean reallyCopyFile(java.io.File from_file, java.io.File to_file, FileUtil.ProgressListener pl)
-
newFileInputStream
public static java.io.FileInputStream newFileInputStream(java.io.File from_file) throws java.io.FileNotFoundException
- Throws:
java.io.FileNotFoundException
-
newFileOutputStream
public static java.io.FileOutputStream newFileOutputStream(java.io.File file) throws java.io.FileNotFoundException
- Throws:
java.io.FileNotFoundException
-
newFileOutputStream
public static java.io.FileOutputStream newFileOutputStream(java.io.File file, boolean append) throws java.io.FileNotFoundException
- Throws:
java.io.FileNotFoundException
-
writeStringAsFile
public static boolean writeStringAsFile(java.io.File file, java.lang.String text)
-
writeStringAsFile
public static boolean writeStringAsFile(java.io.File file, java.lang.String text, java.lang.String charset)
-
writeBytesAsFile
public static void writeBytesAsFile(java.lang.String filename, byte[] file_data)
-
writeBytesAsFile2
public static boolean writeBytesAsFile2(java.lang.String filename, byte[] file_data)
-
deleteWithRecycle
public static boolean deleteWithRecycle(java.io.File file, boolean force_no_recycle)
-
translateMoveFilePath
public static java.lang.String translateMoveFilePath(java.lang.String old_root, java.lang.String new_root, java.lang.String file_to_move)
-
hasTask
public static boolean hasTask(DownloadManager dm)
-
runAsTask
public static void runAsTask(CoreOperationTask task)
-
runAsTask
public static void runAsTask(int op_type, CoreOperationTask task)
-
mkdirs
public static boolean mkdirs(java.io.File f)
Makes Directories as long as the directory isn't directly in Volumes (OSX)- Parameters:
f
-- Returns:
-
getExtension
public static java.lang.String getExtension(java.lang.String fName)
Gets the extension of a file name, ensuring we don't go into the path- Parameters:
fName
- File name- Returns:
- extension, with the '.'
-
readFileAsString
public static java.lang.String readFileAsString(java.io.File file, int size_limit, java.lang.String charset) throws java.io.IOException
- Throws:
java.io.IOException
-
readFileAsString
public static java.lang.String readFileAsString(java.io.File file, int size_limit) throws java.io.IOException
- Throws:
java.io.IOException
-
readGZippedFileAsString
public static java.lang.String readGZippedFileAsString(java.io.File file, int size_limit) throws java.io.IOException
- Throws:
java.io.IOException
-
readInputStreamAsString
public static java.lang.String readInputStreamAsString(java.io.InputStream is, int size_limit) throws java.io.IOException
- Throws:
java.io.IOException
-
readInputStreamAsString
public static java.lang.String readInputStreamAsString(java.io.InputStream is, int size_limit, java.lang.String charSet) throws java.io.IOException
- Throws:
java.io.IOException
-
readInputStreamAsString
public static java.lang.String readInputStreamAsString(java.io.InputStream is, int size_limit, int timeoutMillis, java.lang.String charSet) throws java.io.IOException
- Throws:
java.io.IOException
-
readInputStreamAsStringWithTruncation
public static java.lang.String readInputStreamAsStringWithTruncation(java.io.InputStream is, int size_limit) throws java.io.IOException
- Throws:
java.io.IOException
-
readFileEndAsString
public static java.lang.String readFileEndAsString(java.io.File file, int size_limit, java.lang.String charset) throws java.io.IOException
- Throws:
java.io.IOException
-
readInputStreamAsByteArray
public static byte[] readInputStreamAsByteArray(java.io.InputStream is) throws java.io.IOException
- Throws:
java.io.IOException
-
readInputStreamAsByteArray
public static byte[] readInputStreamAsByteArray(java.io.InputStream is, int size_limit) throws java.io.IOException
- Throws:
java.io.IOException
-
readFileAsByteArray
public static byte[] readFileAsByteArray(java.io.File file) throws java.io.IOException
- Throws:
java.io.IOException
-
getUsableSpaceSupported
public static boolean getUsableSpaceSupported()
-
getUsableSpace
public static long getUsableSpace(java.io.File f)
-
canReallyWriteToAppDirectory
public static boolean canReallyWriteToAppDirectory()
-
canWriteToDirectory
public static boolean canWriteToDirectory(java.io.File dir)
-
log
public static void log(java.lang.String str)
-
log
public static void log(java.lang.String str, java.lang.Throwable error)
-
getScriptCharsetEncoding
public static java.lang.String getScriptCharsetEncoding()
-
newFile
public static java.io.File newFile(java.lang.String parent, java.lang.String... subDirs)
-
newFile
public static java.io.File newFile(java.io.File parent_file, java.lang.String... subDirs)
-
newFile
public static java.io.File newFile(java.net.URI uri)
-
newFileAccessor
public static FMFileAccess.FileAccessor newFileAccessor(java.io.File file, java.lang.String access_mode) throws java.io.FileNotFoundException
- Throws:
java.io.FileNotFoundException
-
containsPathSegment
public static boolean containsPathSegment(java.io.File f, java.lang.String path, boolean caseSensitive)
- Returns:
File.getAbsolutePath()
.contains(File.separator
+ path +File.separator
)
-
getRelativePath
public static java.lang.String getRelativePath(java.io.File parentDir, java.io.File file)
- Returns:
- path string relative to
parentDir
.null
if file is not in parentDir. Empty String if file is parentDir.
-
-