4dce8f09f174c9630c4b89d7180fc7dd0e1f3bcd
[idea/community.git] / platform / util / src / com / intellij / util / io / fs / IoFile.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package com.intellij.util.io.fs;
18
19 import com.intellij.openapi.util.SystemInfo;
20 import com.intellij.openapi.util.io.FileUtil;
21 import org.jetbrains.annotations.NotNull;
22
23 import java.io.*;
24
25 class IoFile implements IFile {
26   private final File myFile;
27   private final IFile[] EMPTY_ARRAY = new IFile[0];
28
29   public IoFile(@NotNull final File file) {
30     myFile = file;
31   }
32
33   public boolean exists() {
34     return myFile.exists();
35   }
36
37   public byte[] loadBytes() throws IOException {
38     return FileUtil.loadFileBytes(myFile);
39   }
40
41   public InputStream openInputStream() throws FileNotFoundException {
42     return new FileInputStream(myFile);
43   }
44
45   public OutputStream openOutputStream() throws FileNotFoundException {
46     return new FileOutputStream(myFile);
47   }
48
49   public boolean delete() {
50     return myFile.delete();
51   }
52
53   public void renameTo(final IFile newFile) throws IOException {
54     FileUtil.rename(myFile, ((IoFile)newFile).myFile);
55   }
56
57   public void createParentDirs() {
58     FileUtil.createParentDirs(myFile);
59   }
60
61   public IFile getParentFile() {
62     return new IoFile(myFile.getParentFile());
63   }
64
65   public String getName() {
66     return myFile.getName();
67   }
68
69   public String getPath() {
70     return myFile.getPath();
71   }
72
73   public String getCanonicalPath() {
74     if (SystemInfo.isFileSystemCaseSensitive) {
75       return myFile.getAbsolutePath(); // fixes problem with symlinks under Unix (however does not under Windows!)
76     }
77     else {
78       try {
79         return myFile.getCanonicalPath();
80       }
81       catch (IOException e) {
82         return null;
83       }
84     }
85   }
86
87   public String getAbsolutePath() {
88     return myFile.getAbsolutePath();
89   }
90
91   public long length() {
92     return myFile.length();
93   }
94
95   public IFile getChild(final String childName) {
96     return new IoFile(new File(myFile, childName)); 
97   }
98
99   public boolean isDirectory() {
100     return myFile.isDirectory();
101   }
102
103   public IFile[] listFiles() {
104     final File[] files = myFile.listFiles();
105     if (files == null) return EMPTY_ARRAY;
106
107     IFile[] result = new IoFile[files.length];
108
109     for (int i = 0; i < result.length; i++) {
110       result[i] = new IoFile(files[i]);
111     }
112
113     return result;
114   }
115
116   public void mkDir() {
117     myFile.mkdir();
118   }
119
120   public long getTimeStamp() {
121     return myFile.lastModified();
122   }
123
124   public boolean equals(final Object o) {
125     if (this == o) return true;
126     if (o == null || getClass() != o.getClass()) return false;
127
128     final IoFile ioFile = (IoFile)o;
129
130     if (!myFile.equals(ioFile.myFile)) return false;
131
132     return true;
133   }
134
135   public int hashCode() {
136     return myFile.hashCode();
137   }
138
139   public String toString() {
140     return myFile.toString();
141   }
142 }