1*b7c941bbSAndroid Build Coastguard Worker /* 2*b7c941bbSAndroid Build Coastguard Worker * Copyright (C) 2007 The Android Open Source Project 3*b7c941bbSAndroid Build Coastguard Worker * 4*b7c941bbSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*b7c941bbSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*b7c941bbSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*b7c941bbSAndroid Build Coastguard Worker * 8*b7c941bbSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*b7c941bbSAndroid Build Coastguard Worker * 10*b7c941bbSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*b7c941bbSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*b7c941bbSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*b7c941bbSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*b7c941bbSAndroid Build Coastguard Worker * limitations under the License. 15*b7c941bbSAndroid Build Coastguard Worker */ 16*b7c941bbSAndroid Build Coastguard Worker 17*b7c941bbSAndroid Build Coastguard Worker package dxconvext.util; 18*b7c941bbSAndroid Build Coastguard Worker 19*b7c941bbSAndroid Build Coastguard Worker import java.io.File; 20*b7c941bbSAndroid Build Coastguard Worker import java.io.FileInputStream; 21*b7c941bbSAndroid Build Coastguard Worker import java.io.IOException; 22*b7c941bbSAndroid Build Coastguard Worker 23*b7c941bbSAndroid Build Coastguard Worker /** 24*b7c941bbSAndroid Build Coastguard Worker * File I/O utilities. 25*b7c941bbSAndroid Build Coastguard Worker */ 26*b7c941bbSAndroid Build Coastguard Worker public final class FileUtils { 27*b7c941bbSAndroid Build Coastguard Worker /** 28*b7c941bbSAndroid Build Coastguard Worker * This class is uninstantiable. 29*b7c941bbSAndroid Build Coastguard Worker */ FileUtils()30*b7c941bbSAndroid Build Coastguard Worker private FileUtils() { 31*b7c941bbSAndroid Build Coastguard Worker // This space intentionally left blank. 32*b7c941bbSAndroid Build Coastguard Worker } 33*b7c941bbSAndroid Build Coastguard Worker 34*b7c941bbSAndroid Build Coastguard Worker /** 35*b7c941bbSAndroid Build Coastguard Worker * Reads the named file, translating {@link IOException} to a 36*b7c941bbSAndroid Build Coastguard Worker * {@link RuntimeException} of some sort. 37*b7c941bbSAndroid Build Coastguard Worker * 38*b7c941bbSAndroid Build Coastguard Worker * @param fileName non-null; name of the file to read 39*b7c941bbSAndroid Build Coastguard Worker * @return non-null; contents of the file 40*b7c941bbSAndroid Build Coastguard Worker */ readFile(String fileName)41*b7c941bbSAndroid Build Coastguard Worker public static byte[] readFile(String fileName) { 42*b7c941bbSAndroid Build Coastguard Worker File file = new File(fileName); 43*b7c941bbSAndroid Build Coastguard Worker return readFile(file); 44*b7c941bbSAndroid Build Coastguard Worker } 45*b7c941bbSAndroid Build Coastguard Worker 46*b7c941bbSAndroid Build Coastguard Worker /** 47*b7c941bbSAndroid Build Coastguard Worker * Reads the given file, translating {@link IOException} to a 48*b7c941bbSAndroid Build Coastguard Worker * {@link RuntimeException} of some sort. 49*b7c941bbSAndroid Build Coastguard Worker * 50*b7c941bbSAndroid Build Coastguard Worker * @param file non-null; the file to read 51*b7c941bbSAndroid Build Coastguard Worker * @return non-null; contents of the file 52*b7c941bbSAndroid Build Coastguard Worker */ readFile(File file)53*b7c941bbSAndroid Build Coastguard Worker public static byte[] readFile(File file) { 54*b7c941bbSAndroid Build Coastguard Worker if (!file.exists()) { 55*b7c941bbSAndroid Build Coastguard Worker throw new RuntimeException(file + ": file not found"); 56*b7c941bbSAndroid Build Coastguard Worker } 57*b7c941bbSAndroid Build Coastguard Worker 58*b7c941bbSAndroid Build Coastguard Worker if (!file.isFile()) { 59*b7c941bbSAndroid Build Coastguard Worker throw new RuntimeException(file + ": not a file"); 60*b7c941bbSAndroid Build Coastguard Worker } 61*b7c941bbSAndroid Build Coastguard Worker 62*b7c941bbSAndroid Build Coastguard Worker if (!file.canRead()) { 63*b7c941bbSAndroid Build Coastguard Worker throw new RuntimeException(file + ": file not readable"); 64*b7c941bbSAndroid Build Coastguard Worker } 65*b7c941bbSAndroid Build Coastguard Worker 66*b7c941bbSAndroid Build Coastguard Worker long longLength = file.length(); 67*b7c941bbSAndroid Build Coastguard Worker int length = (int) longLength; 68*b7c941bbSAndroid Build Coastguard Worker if (length != longLength) { 69*b7c941bbSAndroid Build Coastguard Worker throw new RuntimeException(file + ": file too long"); 70*b7c941bbSAndroid Build Coastguard Worker } 71*b7c941bbSAndroid Build Coastguard Worker 72*b7c941bbSAndroid Build Coastguard Worker byte[] result = new byte[length]; 73*b7c941bbSAndroid Build Coastguard Worker 74*b7c941bbSAndroid Build Coastguard Worker try { 75*b7c941bbSAndroid Build Coastguard Worker FileInputStream in = new FileInputStream(file); 76*b7c941bbSAndroid Build Coastguard Worker int at = 0; 77*b7c941bbSAndroid Build Coastguard Worker while (length > 0) { 78*b7c941bbSAndroid Build Coastguard Worker int amt = in.read(result, at, length); 79*b7c941bbSAndroid Build Coastguard Worker if (amt == -1) { 80*b7c941bbSAndroid Build Coastguard Worker throw new RuntimeException(file + ": unexpected EOF"); 81*b7c941bbSAndroid Build Coastguard Worker } 82*b7c941bbSAndroid Build Coastguard Worker at += amt; 83*b7c941bbSAndroid Build Coastguard Worker length -= amt; 84*b7c941bbSAndroid Build Coastguard Worker } 85*b7c941bbSAndroid Build Coastguard Worker in.close(); 86*b7c941bbSAndroid Build Coastguard Worker } catch (IOException ex) { 87*b7c941bbSAndroid Build Coastguard Worker throw new RuntimeException(file + ": trouble reading", ex); 88*b7c941bbSAndroid Build Coastguard Worker } 89*b7c941bbSAndroid Build Coastguard Worker 90*b7c941bbSAndroid Build Coastguard Worker return result; 91*b7c941bbSAndroid Build Coastguard Worker } 92*b7c941bbSAndroid Build Coastguard Worker } 93