001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.commons.io; 018 019import java.io.IOException; 020import java.nio.file.Files; 021import java.nio.file.Path; 022import java.nio.file.Paths; 023import java.util.Objects; 024 025/** 026 * General File System utilities. 027 * <p> 028 * This class provides static utility methods for general file system functions not provided before Java 6's {@link java.io.File File} class. 029 * </p> 030 * <p> 031 * The current functions provided are: 032 * </p> 033 * <ul> 034 * <li>Get the free space on a drive</li> 035 * </ul> 036 * 037 * @since 1.1 038 * @deprecated As of 2.6 deprecated without replacement. Use equivalent methods in {@link java.nio.file.FileStore} instead, 039 * {@code Files.getFileStore(Paths.get("/home")).getUsableSpace()} or iterate over {@code FileSystems.getDefault().getFileStores()} 040 */ 041@Deprecated 042public class FileSystemUtils { 043 044 /** 045 * Gets the number of kibibytes (1024 bytes) available to this Java virtual machine on the given file store. 046 * <p> 047 * Note that some OS's are NOT currently supported, including OS/390, OpenVMS. 048 * </p> 049 * 050 * <pre> 051 * FileSystemUtils.freeSpace("C:"); // Windows 052 * FileSystemUtils.freeSpace("/volume"); // *nix 053 * </pre> 054 * 055 * @param path the path to get free space for, not null, not empty on UNIX 056 * @return the amount of free drive space on the drive or volume 057 * @throws IOException if an I/O error occurs. 058 * @throws IllegalArgumentException if the path is invalid. 059 * @since 1.1, enhanced OS support in 1.2 and 1.3 060 * @deprecated Use freeSpaceKb(String) Deprecated from 1.3, may be removed in 2.0 061 */ 062 @Deprecated 063 public static long freeSpace(final String path) throws IOException { 064 return getFreeSpace(path); 065 } 066 067 /** 068 * Gets the number of kibibytes (1024 bytes) available to this Java virtual machine on the current file store. 069 * <p> 070 * Identical to: 071 * </p> 072 * 073 * <pre> 074 * freeSpaceKb(FileUtils.current().getAbsolutePath()) 075 * </pre> 076 * 077 * @return the amount of free drive space on the drive or volume in kilobytes 078 * @throws IOException if an I/O error occurs. 079 * @throws IllegalArgumentException if the path is invalid. 080 * @since 2.0 081 * @deprecated As of 2.6 deprecated without replacement. Please use {@link java.nio.file.FileStore#getUsableSpace()}. 082 */ 083 @Deprecated 084 public static long freeSpaceKb() throws IOException { 085 return freeSpaceKb(-1); 086 } 087 088 /** 089 * Gets the number of kibibytes (1024 bytes) available to this Java virtual machine on the current file store. 090 * <p> 091 * Identical to: 092 * </p> 093 * 094 * <pre> 095 * freeSpaceKb(FileUtils.current().getAbsolutePath()) 096 * </pre> 097 * 098 * @param timeout ignored. 099 * @return the amount of free drive space on the drive or volume in kilobytes 100 * @throws IOException if an I/O error occurs. 101 * @throws IllegalArgumentException if the path is invalid. 102 * @since 2.0 103 * @deprecated As of 2.6 deprecated without replacement. Please use {@link java.nio.file.FileStore#getUsableSpace()}. 104 */ 105 @Deprecated 106 public static long freeSpaceKb(final long timeout) throws IOException { 107 return freeSpaceKb(FileUtils.current().getAbsolutePath(), timeout); 108 } 109 110 /** 111 * Gets the number of kibibytes (1024 bytes) available to this Java virtual machine on the given file store. 112 * 113 * <pre> 114 * FileSystemUtils.freeSpaceKb("C:"); // Windows 115 * FileSystemUtils.freeSpaceKb("/volume"); // *nix 116 * </pre> 117 * 118 * @param path the path to get free space for, not null, not empty on UNIX 119 * @return the amount of free drive space on the drive or volume in kilobytes 120 * @throws IOException if an I/O error occurs. 121 * @throws IllegalArgumentException if the path is invalid. 122 * @since 1.2, enhanced OS support in 1.3 123 * @deprecated As of 2.6 deprecated without replacement. Please use {@link java.nio.file.FileStore#getUsableSpace()}. 124 */ 125 @Deprecated 126 public static long freeSpaceKb(final String path) throws IOException { 127 return freeSpaceKb(path, -1); 128 } 129 130 /** 131 * Gets the number of kibibytes (1024 bytes) available to this Java virtual machine on the given file store. 132 * 133 * <pre> 134 * FileSystemUtils.freeSpaceKb("C:"); // Windows 135 * FileSystemUtils.freeSpaceKb("/volume"); // *nix 136 * </pre> 137 * 138 * @param path the path to get free space for, not null, not empty on UNIX 139 * @param timeout ignored. 140 * @return the amount of free drive space on the drive or volume in kilobytes 141 * @throws IOException if an I/O error occurs. 142 * @throws IllegalArgumentException if the path is invalid. 143 * @since 2.0 144 * @deprecated As of 2.6 deprecated without replacement. Please use {@link java.nio.file.FileStore#getUsableSpace()}. 145 */ 146 @Deprecated 147 public static long freeSpaceKb(final String path, final long timeout) throws IOException { 148 return getFreeSpace(path) / FileUtils.ONE_KB; 149 } 150 151 /** 152 * Gets the number of bytes available to this Java virtual machine on the given file store. 153 * 154 * <pre> 155 * FileSystemUtils.freeSpace("C:"); // Windows 156 * FileSystemUtils.freeSpace("/volume"); // *nix 157 * </pre> 158 * 159 * @param pathStr the path to get free space for, not null, not empty on UNIX 160 * @return the amount of free drive space on the drive or volume 161 * @throws IOException if an I/O error occurs. 162 * @throws IllegalArgumentException if the path is invalid. 163 */ 164 static long getFreeSpace(final String pathStr) throws IOException { 165 final Path path = Paths.get(Objects.requireNonNull(pathStr, "pathStr")); 166 if (Files.exists(path)) { 167 // Need an absolute path for input like "" to work 168 return Files.getFileStore(path.toAbsolutePath()).getUsableSpace(); 169 // return path.toAbsolutePath().toFile().getUsableSpace(); 170 } 171 throw new IllegalArgumentException(path.toString()); 172 } 173 174 /** 175 * Instances should NOT be constructed in standard programming. 176 * 177 * @deprecated TODO Make private in 3.0. 178 */ 179 @Deprecated 180 public FileSystemUtils() { 181 // empty 182 } 183 184}