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