001 /**
002 * Licensed to the Apache Software Foundation (ASF) under one
003 * or more contributor license agreements. See the NOTICE file
004 * distributed with this work for additional information
005 * regarding copyright ownership. The ASF licenses this file
006 * to you under the Apache License, Version 2.0 (the
007 * "License"); you may not use this file except in compliance
008 * with the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 package org.apache.hadoop.fs;
019
020 import java.io.File;
021 import org.apache.hadoop.util.Shell;
022
023 public class DUHelper {
024
025 private int folderCount=0;
026 private int fileCount=0;
027 private double usage = 0;
028 private long folderSize = -1;
029
030 private DUHelper() {
031
032 }
033
034 public static long getFolderUsage(String folder) {
035 return new DUHelper().calculateFolderSize(folder);
036 }
037
038 private long calculateFolderSize(String folder) {
039 if (folder == null)
040 throw new IllegalArgumentException("folder");
041 File f = new File(folder);
042 return folderSize = getFileSize(f);
043 }
044
045 public String check(String folder) {
046 if (folder == null)
047 throw new IllegalArgumentException("folder");
048 File f = new File(folder);
049
050 folderSize = getFileSize(f);
051 usage = 1.0*(f.getTotalSpace() - f.getFreeSpace())/ f.getTotalSpace();
052 return String.format("used %d files %d disk in use %f", folderSize, fileCount, usage);
053 }
054
055 public long getFileCount() {
056 return fileCount;
057 }
058
059 public double getUsage() {
060 return usage;
061 }
062
063 private long getFileSize(File folder) {
064
065 folderCount++;
066 //Counting the total folders
067 long foldersize = 0;
068 if (folder.isFile())
069 return folder.length();
070 File[] filelist = folder.listFiles();
071 if (filelist == null) {
072 return 0;
073 }
074 for (int i = 0; i < filelist.length; i++) {
075 if (filelist[i].isDirectory()) {
076 foldersize += getFileSize(filelist[i]);
077 } else {
078 fileCount++; //Counting the total files
079 foldersize += filelist[i].length();
080 }
081 }
082 return foldersize;
083 }
084
085 public static void main(String[] args) {
086 if (Shell.WINDOWS)
087 System.out.println("Windows: "+ DUHelper.getFolderUsage(args[0]));
088 else
089 System.out.println("Other: " + DUHelper.getFolderUsage(args[0]));
090 }
091 }