1 /* 2 * ProGuard -- shrinking, optimization, obfuscation, and preverification 3 * of Java bytecode. 4 * 5 * Copyright (c) 2002-2009 Eric Lafortune (eric (at) graphics.cornell.edu) 6 * 7 * This program is free software; you can redistribute it and/or modify it 8 * under the terms of the GNU General Public License as published by the Free 9 * Software Foundation; either version 2 of the License, or (at your option) 10 * any later version. 11 * 12 * This program is distributed in the hope that it will be useful, but WITHOUT 13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 15 * more details. 16 * 17 * You should have received a copy of the GNU General Public License along 18 * with this program; if not, write to the Free Software Foundation, Inc., 19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20 */ 21 package proguard.io; 22 23 import proguard.classfile.ClassConstants; 24 25 import java.io.*; 26 27 /** 28 * This <code>DataEntry</code> represents a file. 29 * 30 * @author Eric Lafortune 31 */ 32 public class FileDataEntry implements DataEntry 33 { 34 private final File directory; 35 private final File file; 36 private InputStream inputStream; 37 38 39 public FileDataEntry(File directory, 40 File file) 41 { 42 this.directory = directory; 43 this.file = file; 44 } 45 46 47 // Implementations for DataEntry. 48 49 public String getName() 50 { 51 // Chop the directory name from the file name and get the right separators. 52 return file.equals(directory) ? 53 file.getName() : 54 file.getPath() 55 .substring(directory.getPath().length() + File.separator.length()) 56 .replace(File.separatorChar, ClassConstants.INTERNAL_PACKAGE_SEPARATOR); 57 } 58 59 60 public boolean isDirectory() 61 { 62 return file.isDirectory(); 63 } 64 65 66 public InputStream getInputStream() throws IOException 67 { 68 if (inputStream == null) 69 { 70 inputStream = new BufferedInputStream(new FileInputStream(file)); 71 } 72 73 return inputStream; 74 } 75 76 77 public void closeInputStream() throws IOException 78 { 79 inputStream.close(); 80 inputStream = null; 81 } 82 83 84 public DataEntry getParent() 85 { 86 return null; 87 } 88 89 90 // Implementations for Object. 91 92 public String toString() 93 { 94 return getName(); 95 } 96 } 97