158 lines
4.6 KiB
Java
158 lines
4.6 KiB
Java
/*
|
|
* Copyright (C) 2007 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.
|
|
*/
|
|
|
|
package android.os;
|
|
|
|
import android.compat.annotation.UnsupportedAppUsage;
|
|
import android.system.ErrnoException;
|
|
import android.system.Os;
|
|
import android.system.StructStatVfs;
|
|
|
|
/**
|
|
* Retrieve overall information about the space on a filesystem. This is a
|
|
* wrapper for Unix statvfs().
|
|
*/
|
|
public class StatFs {
|
|
@UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
|
|
private StructStatVfs mStat;
|
|
|
|
/**
|
|
* Construct a new StatFs for looking at the stats of the filesystem at
|
|
* {@code path}. Upon construction, the stat of the file system will be
|
|
* performed, and the values retrieved available from the methods on this
|
|
* class.
|
|
*
|
|
* @param path path in the desired file system to stat.
|
|
*
|
|
* @throws IllegalArgumentException if the file system access fails
|
|
*/
|
|
public StatFs(String path) {
|
|
mStat = doStat(path);
|
|
}
|
|
|
|
/**
|
|
* @throws IllegalArgumentException if the file system access fails
|
|
*/
|
|
private static StructStatVfs doStat(String path) {
|
|
try {
|
|
return Os.statvfs(path);
|
|
} catch (ErrnoException e) {
|
|
throw new IllegalArgumentException("Invalid path: " + path, e);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Perform a restat of the file system referenced by this object. This is
|
|
* the same as re-constructing the object with the same file system path,
|
|
* and the new stat values are available upon return.
|
|
*
|
|
* @throws IllegalArgumentException if the file system access fails
|
|
*/
|
|
public void restat(String path) {
|
|
mStat = doStat(path);
|
|
}
|
|
|
|
/**
|
|
* @deprecated Use {@link #getBlockSizeLong()} instead.
|
|
*/
|
|
@Deprecated
|
|
public int getBlockSize() {
|
|
return (int) mStat.f_frsize;
|
|
}
|
|
|
|
/**
|
|
* The size, in bytes, of a block on the file system. This corresponds to
|
|
* the Unix {@code statvfs.f_frsize} field.
|
|
*/
|
|
public long getBlockSizeLong() {
|
|
return mStat.f_frsize;
|
|
}
|
|
|
|
/**
|
|
* @deprecated Use {@link #getBlockCountLong()} instead.
|
|
*/
|
|
@Deprecated
|
|
public int getBlockCount() {
|
|
return (int) mStat.f_blocks;
|
|
}
|
|
|
|
/**
|
|
* The total number of blocks on the file system. This corresponds to the
|
|
* Unix {@code statvfs.f_blocks} field.
|
|
*/
|
|
public long getBlockCountLong() {
|
|
return mStat.f_blocks;
|
|
}
|
|
|
|
/**
|
|
* @deprecated Use {@link #getFreeBlocksLong()} instead.
|
|
*/
|
|
@Deprecated
|
|
public int getFreeBlocks() {
|
|
return (int) mStat.f_bfree;
|
|
}
|
|
|
|
/**
|
|
* The total number of blocks that are free on the file system, including
|
|
* reserved blocks (that are not available to normal applications). This
|
|
* corresponds to the Unix {@code statvfs.f_bfree} field. Most applications
|
|
* will want to use {@link #getAvailableBlocksLong()} instead.
|
|
*/
|
|
public long getFreeBlocksLong() {
|
|
return mStat.f_bfree;
|
|
}
|
|
|
|
/**
|
|
* The number of bytes that are free on the file system, including reserved
|
|
* blocks (that are not available to normal applications). Most applications
|
|
* will want to use {@link #getAvailableBytes()} instead.
|
|
*/
|
|
public long getFreeBytes() {
|
|
return mStat.f_bfree * mStat.f_frsize;
|
|
}
|
|
|
|
/**
|
|
* @deprecated Use {@link #getAvailableBlocksLong()} instead.
|
|
*/
|
|
@Deprecated
|
|
public int getAvailableBlocks() {
|
|
return (int) mStat.f_bavail;
|
|
}
|
|
|
|
/**
|
|
* The number of blocks that are free on the file system and available to
|
|
* applications. This corresponds to the Unix {@code statvfs.f_bavail} field.
|
|
*/
|
|
public long getAvailableBlocksLong() {
|
|
return mStat.f_bavail;
|
|
}
|
|
|
|
/**
|
|
* The number of bytes that are free on the file system and available to
|
|
* applications.
|
|
*/
|
|
public long getAvailableBytes() {
|
|
return mStat.f_bavail * mStat.f_frsize;
|
|
}
|
|
|
|
/**
|
|
* The total number of bytes supported by the file system.
|
|
*/
|
|
public long getTotalBytes() {
|
|
return mStat.f_blocks * mStat.f_frsize;
|
|
}
|
|
}
|