1d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger/* 2d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * Copyright (C) 2010 The Android Open Source Project 3d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * 4d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * Licensed under the Apache License, Version 2.0 (the "License"); 5d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * you may not use this file except in compliance with the License. 6d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * You may obtain a copy of the License at 7d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * 8d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * http://www.apache.org/licenses/LICENSE-2.0 9d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * 10d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * Unless required by applicable law or agreed to in writing, software 11d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * distributed under the License is distributed on an "AS IS" BASIS, 12d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * See the License for the specific language governing permissions and 14d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * limitations under the License. 15d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger */ 16d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger 17d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newbergerpackage com.bumptech.glide.disklrucache; 18d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger 19d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newbergerimport java.io.Closeable; 20d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newbergerimport java.io.File; 21d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newbergerimport java.io.IOException; 22d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newbergerimport java.io.Reader; 23d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newbergerimport java.io.StringWriter; 24d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newbergerimport java.nio.charset.Charset; 25d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger 26d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger/** Junk drawer of utility methods. */ 27d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newbergerfinal class Util { 28d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger static final Charset US_ASCII = Charset.forName("US-ASCII"); 29d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger static final Charset UTF_8 = Charset.forName("UTF-8"); 30d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger 31d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger private Util() { 32d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } 33d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger 34d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger static String readFully(Reader reader) throws IOException { 35d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger try { 36d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger StringWriter writer = new StringWriter(); 37d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger char[] buffer = new char[1024]; 38d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger int count; 39d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger while ((count = reader.read(buffer)) != -1) { 40d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger writer.write(buffer, 0, count); 41d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } 42d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger return writer.toString(); 43d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } finally { 44d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger reader.close(); 45d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } 46d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } 47d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger 48d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger /** 49d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * Deletes the contents of {@code dir}. Throws an IOException if any file 50d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger * could not be deleted, or if {@code dir} is not a readable directory. 51d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger */ 52d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger static void deleteContents(File dir) throws IOException { 53d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger File[] files = dir.listFiles(); 54d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger if (files == null) { 55d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger throw new IOException("not a readable directory: " + dir); 56d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } 57d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger for (File file : files) { 58d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger if (file.isDirectory()) { 59d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger deleteContents(file); 60d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } 61d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger if (!file.delete()) { 62d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger throw new IOException("failed to delete file: " + file); 63d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } 64d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } 65d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } 66d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger 67d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger static void closeQuietly(/*Auto*/Closeable closeable) { 68d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger if (closeable != null) { 69d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger try { 70d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger closeable.close(); 71d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } catch (RuntimeException rethrown) { 72d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger throw rethrown; 73d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } catch (Exception ignored) { 74d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } 75d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } 76d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger } 77d7429cebda1204623acc02825eaf50053a7ec3a9Alan Newberger} 78