public final class Files
extends java.lang.Object
Path users will find similar utilities in MoreFiles and the
JDK's Files class.
| Modifier and Type | Class and Description |
|---|---|
private static class |
Files.FileByteSink |
private static class |
Files.FileByteSource |
private static class |
Files.FilePredicate |
| Modifier and Type | Field and Description |
|---|---|
private static SuccessorsFunction<java.io.File> |
FILE_TREE |
private static int |
TEMP_DIR_ATTEMPTS
Maximum loop count when creating temp directories.
|
| Modifier | Constructor and Description |
|---|---|
private |
Files() |
| Modifier and Type | Method and Description |
|---|---|
static void |
append(java.lang.CharSequence from,
java.io.File to,
java.nio.charset.Charset charset)
Deprecated.
Prefer
asCharSink(to, charset, FileWriteMode.APPEND).write(from). This
method is scheduled to be removed in October 2019. |
static ByteSink |
asByteSink(java.io.File file,
FileWriteMode... modes)
Returns a new
ByteSink for writing bytes to the given file. |
static ByteSource |
asByteSource(java.io.File file)
Returns a new
ByteSource for reading bytes from the given file. |
static CharSink |
asCharSink(java.io.File file,
java.nio.charset.Charset charset,
FileWriteMode... modes)
Returns a new
CharSink for writing character data to the given file using the given
character set. |
static CharSource |
asCharSource(java.io.File file,
java.nio.charset.Charset charset)
Returns a new
CharSource for reading character data from the given file using the given
character set. |
static void |
copy(java.io.File from,
java.nio.charset.Charset charset,
java.lang.Appendable to)
Deprecated.
Prefer
asCharSource(from, charset).copyTo(to). |
static void |
copy(java.io.File from,
java.io.File to)
Copies all the bytes from one file to another.
|
static void |
copy(java.io.File from,
java.io.OutputStream to)
Copies all bytes from a file to an output stream.
|
static void |
createParentDirs(java.io.File file)
Creates any necessary but nonexistent parent directories of the specified file.
|
static java.io.File |
createTempDir()
Deprecated.
For Android users, see the Data and File
Storage overview to select an appropriate temporary directory (perhaps
context.getCacheDir()). For developers on Java 7 or later, use Files.createTempDirectory(java.nio.file.Path, java.lang.String, java.nio.file.attribute.FileAttribute<?>...), transforming it to a File using toFile() if needed. |
static boolean |
equal(java.io.File file1,
java.io.File file2)
Returns true if the given files exist, are not directories, and contain the same bytes.
|
static Traverser<java.io.File> |
fileTraverser()
Returns a
Traverser instance for the file and directory tree. |
static java.lang.String |
getFileExtension(java.lang.String fullName)
Returns the file extension for
the given file name, or the empty string if the file has no extension.
|
static java.lang.String |
getNameWithoutExtension(java.lang.String file)
Returns the file name without its file extension or path.
|
static HashCode |
hash(java.io.File file,
HashFunction hashFunction)
Deprecated.
Prefer
asByteSource(file).hash(hashFunction). |
static Predicate<java.io.File> |
isDirectory()
Returns a predicate that returns the result of
File.isDirectory() on input files. |
static Predicate<java.io.File> |
isFile()
Returns a predicate that returns the result of
File.isFile() on input files. |
static java.nio.MappedByteBuffer |
map(java.io.File file)
Fully maps a file read-only in to memory as per
FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long). |
static java.nio.MappedByteBuffer |
map(java.io.File file,
java.nio.channels.FileChannel.MapMode mode)
Fully maps a file in to memory as per
FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long) using the requested FileChannel.MapMode. |
static java.nio.MappedByteBuffer |
map(java.io.File file,
java.nio.channels.FileChannel.MapMode mode,
long size)
Maps a file in to memory as per
FileChannel.map(java.nio.channels.FileChannel.MapMode,
long, long) using the requested FileChannel.MapMode. |
private static java.nio.MappedByteBuffer |
mapInternal(java.io.File file,
java.nio.channels.FileChannel.MapMode mode,
long size) |
static void |
move(java.io.File from,
java.io.File to)
Moves a file from one path to another.
|
static java.io.BufferedReader |
newReader(java.io.File file,
java.nio.charset.Charset charset)
Returns a buffered reader that reads from a file using the given character set.
|
static java.io.BufferedWriter |
newWriter(java.io.File file,
java.nio.charset.Charset charset)
Returns a buffered writer that writes to a file using the given character set.
|
static <T> T |
readBytes(java.io.File file,
ByteProcessor<T> processor)
Deprecated.
Prefer
asByteSource(file).read(processor). |
static java.lang.String |
readFirstLine(java.io.File file,
java.nio.charset.Charset charset)
Deprecated.
Prefer
asCharSource(file, charset).readFirstLine(). |
static java.util.List<java.lang.String> |
readLines(java.io.File file,
java.nio.charset.Charset charset)
Reads all of the lines from a file.
|
static <T> T |
readLines(java.io.File file,
java.nio.charset.Charset charset,
LineProcessor<T> callback)
Deprecated.
Prefer
asCharSource(file, charset).readLines(callback). |
static java.lang.String |
simplifyPath(java.lang.String pathname)
Returns the lexically cleaned form of the path name, usually (but not always) equivalent
to the original.
|
static byte[] |
toByteArray(java.io.File file)
Reads all bytes from a file into a byte array.
|
static java.lang.String |
toString(java.io.File file,
java.nio.charset.Charset charset)
Deprecated.
Prefer
asCharSource(file, charset).read(). |
static void |
touch(java.io.File file)
Creates an empty file or updates the last updated timestamp on the same as the unix command of
the same name.
|
static void |
write(byte[] from,
java.io.File to)
Overwrites a file with the contents of a byte array.
|
static void |
write(java.lang.CharSequence from,
java.io.File to,
java.nio.charset.Charset charset)
Deprecated.
Prefer
asCharSink(to, charset).write(from). |
private static final int TEMP_DIR_ATTEMPTS
private static final SuccessorsFunction<java.io.File> FILE_TREE
public static java.io.BufferedReader newReader(java.io.File file,
java.nio.charset.Charset charset)
throws java.io.FileNotFoundException
Path equivalent: Files.newBufferedReader(java.nio.file.Path, Charset).
file - the file to read fromcharset - the charset used to decode the input stream; see StandardCharsets for
helpful predefined constantsjava.io.FileNotFoundExceptionpublic static java.io.BufferedWriter newWriter(java.io.File file,
java.nio.charset.Charset charset)
throws java.io.FileNotFoundException
Path equivalent: Files.newBufferedWriter(java.nio.file.Path, Charset,
java.nio.file.OpenOption...).
file - the file to write tocharset - the charset used to encode the output stream; see StandardCharsets for
helpful predefined constantsjava.io.FileNotFoundExceptionpublic static ByteSource asByteSource(java.io.File file)
ByteSource for reading bytes from the given file.public static ByteSink asByteSink(java.io.File file, FileWriteMode... modes)
ByteSink for writing bytes to the given file. The given modes
control how the file is opened for writing. When no mode is provided, the file will be
truncated before writing. When the APPEND mode is provided, writes
will append to the end of the file without truncating it.public static CharSource asCharSource(java.io.File file, java.nio.charset.Charset charset)
CharSource for reading character data from the given file using the given
character set.public static CharSink asCharSink(java.io.File file, java.nio.charset.Charset charset, FileWriteMode... modes)
CharSink for writing character data to the given file using the given
character set. The given modes control how the file is opened for writing. When no mode
is provided, the file will be truncated before writing. When the APPEND mode is provided, writes will append to the end of the file without truncating it.public static byte[] toByteArray(java.io.File file)
throws java.io.IOException
Path equivalent: Files.readAllBytes(java.nio.file.Path).
file - the file to read fromjava.lang.IllegalArgumentException - if the file is bigger than the largest possible byte array
(2^31 - 1)java.io.IOException - if an I/O error occurs@Deprecated
public static java.lang.String toString(java.io.File file,
java.nio.charset.Charset charset)
throws java.io.IOException
asCharSource(file, charset).read().String, using the given character set.file - the file to read fromcharset - the charset used to decode the input stream; see StandardCharsets for
helpful predefined constantsjava.io.IOException - if an I/O error occurspublic static void write(byte[] from,
java.io.File to)
throws java.io.IOException
Path equivalent: Files.write(java.nio.file.Path, byte[], java.nio.file.OpenOption...).
from - the bytes to writeto - the destination filejava.io.IOException - if an I/O error occurs@Deprecated
public static void write(java.lang.CharSequence from,
java.io.File to,
java.nio.charset.Charset charset)
throws java.io.IOException
asCharSink(to, charset).write(from).from - the character sequence to writeto - the destination filecharset - the charset used to encode the output stream; see StandardCharsets for
helpful predefined constantsjava.io.IOException - if an I/O error occurspublic static void copy(java.io.File from,
java.io.OutputStream to)
throws java.io.IOException
Path equivalent: Files.copy(java.nio.file.Path, OutputStream).
from - the source fileto - the output streamjava.io.IOException - if an I/O error occurspublic static void copy(java.io.File from,
java.io.File to)
throws java.io.IOException
Copying is not an atomic operation - in the case of an I/O error, power loss, process
termination, or other problems, to may not be a complete copy of from. If you
need to guard against those conditions, you should employ other file-level synchronization.
Warning: If to represents an existing file, that file will be overwritten
with the contents of from. If to and from refer to the same
file, the contents of that file will be deleted.
Path equivalent: Files.copy(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...).
from - the source fileto - the destination filejava.io.IOException - if an I/O error occursjava.lang.IllegalArgumentException - if from.equals(to)@Deprecated
public static void copy(java.io.File from,
java.nio.charset.Charset charset,
java.lang.Appendable to)
throws java.io.IOException
asCharSource(from, charset).copyTo(to).from - the source filecharset - the charset used to decode the input stream; see StandardCharsets for
helpful predefined constantsto - the appendable objectjava.io.IOException - if an I/O error occurs@Deprecated
public static void append(java.lang.CharSequence from,
java.io.File to,
java.nio.charset.Charset charset)
throws java.io.IOException
asCharSink(to, charset, FileWriteMode.APPEND).write(from). This
method is scheduled to be removed in October 2019.from - the character sequence to appendto - the destination filecharset - the charset used to encode the output stream; see StandardCharsets for
helpful predefined constantsjava.io.IOException - if an I/O error occurspublic static boolean equal(java.io.File file1,
java.io.File file2)
throws java.io.IOException
java.io.IOException - if an I/O error occurs@Deprecated public static java.io.File createTempDir()
context.getCacheDir()). For developers on Java 7 or later, use Files.createTempDirectory(java.nio.file.Path, java.lang.String, java.nio.file.attribute.FileAttribute<?>...), transforming it to a File using toFile() if needed.java.io.tmpdir system property), and returns its name.
Use this method instead of File.createTempFile(String, String) when you wish to
create a directory, not a regular file. A common pitfall is to call createTempFile,
delete the file and create a directory in its place, but this leads a race condition which can
be exploited to create security vulnerabilities, especially when executable files are to be
written into the directory.
Depending on the environmment that this code is run in, the system temporary directory (and thus the directory this method creates) may be more visible that a program would like - files written to this directory may be read or overwritten by hostile programs running on the same machine.
This method assumes that the temporary volume is writable, has free inodes and free blocks, and that it will not be called thousands of times per second.
Path equivalent: Files.createTempDirectory(java.nio.file.Path, java.lang.String, java.nio.file.attribute.FileAttribute<?>...).
java.lang.IllegalStateException - if the directory could not be createdpublic static void touch(java.io.File file)
throws java.io.IOException
file - the file to create or updatejava.io.IOException - if an I/O error occurspublic static void createParentDirs(java.io.File file)
throws java.io.IOException
java.io.IOException - if an I/O error occurs, or if any necessary but nonexistent parent
directories of the specified file could not be created.public static void move(java.io.File from,
java.io.File to)
throws java.io.IOException
to must be the target path for the file itself; not
just the new name for the file or the path to the new parent directory.
Path equivalent: Files.move(java.nio.file.Path, java.nio.file.Path, java.nio.file.CopyOption...).
from - the source fileto - the destination filejava.io.IOException - if an I/O error occursjava.lang.IllegalArgumentException - if from.equals(to)@Deprecated
@CheckForNull
public static java.lang.String readFirstLine(java.io.File file,
java.nio.charset.Charset charset)
throws java.io.IOException
asCharSource(file, charset).readFirstLine().file - the file to read fromcharset - the charset used to decode the input stream; see StandardCharsets for
helpful predefined constantsjava.io.IOException - if an I/O error occurspublic static java.util.List<java.lang.String> readLines(java.io.File file,
java.nio.charset.Charset charset)
throws java.io.IOException
This method returns a mutable List. For an ImmutableList, use Files.asCharSource(file, charset).readLines().
Path equivalent: Files.readAllLines(java.nio.file.Path, Charset).
file - the file to read fromcharset - the charset used to decode the input stream; see StandardCharsets for
helpful predefined constantsList containing all the linesjava.io.IOException - if an I/O error occurs@Deprecated
public static <T> T readLines(java.io.File file,
java.nio.charset.Charset charset,
LineProcessor<T> callback)
throws java.io.IOException
asCharSource(file, charset).readLines(callback).File, stopping when our callback returns false, or we have read
all of the lines.file - the file to read fromcharset - the charset used to decode the input stream; see StandardCharsets for
helpful predefined constantscallback - the LineProcessor to use to handle the linesjava.io.IOException - if an I/O error occurs@Deprecated
public static <T> T readBytes(java.io.File file,
ByteProcessor<T> processor)
throws java.io.IOException
asByteSource(file).read(processor).(If this seems too complicated, maybe you're looking for toByteArray(java.io.File).)
file - the file to readprocessor - the object to which the bytes of the file are passed.java.io.IOException - if an I/O error occurs@Deprecated public static HashCode hash(java.io.File file, HashFunction hashFunction) throws java.io.IOException
asByteSource(file).hash(hashFunction).file using hashFunction.file - the file to readhashFunction - the hash function to use to hash the dataHashCode of all of the bytes in the filejava.io.IOException - if an I/O error occurspublic static java.nio.MappedByteBuffer map(java.io.File file)
throws java.io.IOException
FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long).
Files are mapped from offset 0 to its length.
This only works for files ≤ Integer.MAX_VALUE bytes.
file - the file to mapfilejava.io.FileNotFoundException - if the file does not existjava.io.IOException - if an I/O error occursFileChannel.map(MapMode, long, long)public static java.nio.MappedByteBuffer map(java.io.File file,
java.nio.channels.FileChannel.MapMode mode)
throws java.io.IOException
FileChannel.map(java.nio.channels.FileChannel.MapMode, long, long) using the requested FileChannel.MapMode.
Files are mapped from offset 0 to its length.
This only works for files ≤ Integer.MAX_VALUE bytes.
file - the file to mapmode - the mode to use when mapping filefilejava.io.FileNotFoundException - if the file does not existjava.io.IOException - if an I/O error occursFileChannel.map(MapMode, long, long)public static java.nio.MappedByteBuffer map(java.io.File file,
java.nio.channels.FileChannel.MapMode mode,
long size)
throws java.io.IOException
FileChannel.map(java.nio.channels.FileChannel.MapMode,
long, long) using the requested FileChannel.MapMode.
Files are mapped from offset 0 to size.
If the mode is FileChannel.MapMode.READ_WRITE and the file does not exist, it will be created
with the requested size. Thus this method is useful for creating memory mapped files
which do not yet exist.
This only works for files ≤ Integer.MAX_VALUE bytes.
file - the file to mapmode - the mode to use when mapping filefilejava.io.IOException - if an I/O error occursFileChannel.map(MapMode, long, long)private static java.nio.MappedByteBuffer mapInternal(java.io.File file,
java.nio.channels.FileChannel.MapMode mode,
long size)
throws java.io.IOException
java.io.IOExceptionpublic static java.lang.String simplifyPath(java.lang.String pathname)
These heuristics do not always match the behavior of the filesystem. In particular, consider
the path a/../b, which simplifyPath will change to b. If a is a
symlink to x, a/../b may refer to a sibling of x, rather than the
sibling of a referred to by b.
public static java.lang.String getFileExtension(java.lang.String fullName)
.'.
Note: This method simply returns everything after the last '.' in the file's
name as determined by File.getName(). It does not account for any filesystem-specific
behavior that the File API does not already account for. For example, on NTFS it will
report "txt" as the extension for the filename "foo.exe:.txt" even though NTFS
will drop the ":.txt" part of the name when the file is actually created on the
filesystem due to NTFS's Alternate Data Streams.
public static java.lang.String getNameWithoutExtension(java.lang.String file)
basename unix command. The result does not include the '.'.file - The name of the file to trim the extension from. This can be either a fully
qualified file name (including a path) or just a file name.public static Traverser<java.io.File> fileTraverser()
Traverser instance for the file and directory tree. The returned traverser
starts from a File and will return all files and directories it encounters.
Warning: File provides no support for symbolic links, and as such there is no
way to ensure that a symbolic link to a directory is not followed when traversing the tree. In
this case, iterables created by this traverser could contain files that are outside of the
given directory or even be infinite if there is a symbolic link loop.
If available, consider using MoreFiles.fileTraverser() instead. It behaves the same
except that it doesn't follow symbolic links and returns Path instances.
If the File passed to one of the Traverser methods does not exist or is not
a directory, no exception will be thrown and the returned Iterable will contain a
single element: that file.
Example: Files.fileTraverser().depthFirstPreOrder(new File("/")) may return files
with the following paths: ["/", "/etc", "/etc/config.txt", "/etc/fonts", "/home",
"/home/alice", ...]
public static Predicate<java.io.File> isDirectory()
File.isDirectory() on input files.public static Predicate<java.io.File> isFile()
File.isFile() on input files.