-
Notifications
You must be signed in to change notification settings - Fork 0
/
FileUtil.java
171 lines (151 loc) · 4.79 KB
/
FileUtil.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
import java.io.*;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
/**
* DateTime: 2016/9/18 21:04
* 功能:文件操作工具
* 思路:
*/
public class FileUtil {
public static void main(String[] args) {
}
/**
*创建目录
* @param destDirName 目标目录名
* @return
*/
public static boolean createDir(String destDirName){
File dir=new File(destDirName);
if(dir.exists()){
return false;
}
if(!destDirName.endsWith(File.separator)){ //如果结尾没有文件分隔符
destDirName+=File.separator;
}
//创建单个目录
if(dir.mkdir()){
return true;
}else return false;
}
/**
* 删除文件
* @param filePathAndName 文件路径及名称 如c:/fqf.txt
*/
public static void delFile(String filePathAndName){
try {
String filePath=filePathAndName;
filePath=filePath.toString();
File myDelFile=new File(filePath);
myDelFile.delete();
}catch ( Exception e ){
System.out.println("删除文件出错");
e.printStackTrace();
}
}
/**
* 读取到字节数组0
* @param filePath 路径
* @return
* @throws IOException
*/
public static byte[] getContent(String filePath) throws IOException{
File file=new File(filePath);
long fileSize=file.length();
if(fileSize>Integer.MAX_VALUE){
System.out.println("文件太大....");
return null;
}
FileInputStream fi=new FileInputStream(file);
byte[] buffer=new byte[(int)fileSize];
int offset=0;
int numRead=0;
while ( offset<buffer.length &&(numRead=fi.read(buffer,offset,buffer.length-offset))>=0 ){
offset+=numRead;
}
//确保所有数据均被读完
if(offset!=buffer.length){
throw new IOException("不能全部读取文件:"+file.getName());
}
fi.close();
return buffer;
}
/**
* 读取到字节数组1
* @param filePath
* @return
* @throws IOException
*/
public static byte[] toByteArray(String filePath) throws IOException{
File f=new File(filePath);
if(!f.exists()){
throw new FileNotFoundException("文件不能找到:"+filePath);
}
ByteArrayOutputStream bos=new ByteArrayOutputStream((int)f.length());
BufferedInputStream in=null;
try {
in=new BufferedInputStream(new FileInputStream(f));
int buf_size=1024;
byte[] buffer=new byte[buf_size];
int len=0;
while ( -1!=(len=in.read(buffer,0,buf_size)) ){
bos.write(buffer,0,len);
}
return bos.toByteArray();
}catch ( IOException e ){
e.printStackTrace();
throw e;
}finally {
in.close();
bos.close();
}
}
public static byte[] toByteArray2(String filePath) throws IOException{
File f=new File(filePath);
if(!f.exists()){
throw new FileNotFoundException("文件不能找到:"+filePath);
}
FileChannel channel=null; //Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。
FileInputStream fs=null;
try {
fs=new FileInputStream(f);
channel=fs.getChannel();
ByteBuffer byteBuffer=ByteBuffer.allocate((int)channel.size());
while ( (channel.read(byteBuffer)) >0 ){
}
return byteBuffer.array();
}catch ( IOException e ){
e.printStackTrace();
throw e;
}finally {
channel.close();
fs.close();
}
}
/**
* Mapped File way MappedByteBuffer 可以在处理大文件时,提升性能
* @param filePath
* @return
* @throws IOException
*/
public static byte[] toByteArray3(String filePath) throws IOException{
FileChannel fc=null;
RandomAccessFile rf=null;
try {
rf=new RandomAccessFile(filePath,"r");
fc=rf.getChannel();
MappedByteBuffer byteBuffer=fc.map(FileChannel.MapMode.READ_ONLY,0,fc.size()).load();
byte[] result=new byte[(int)fc.size()];
if(byteBuffer.remaining()>0){
byteBuffer.get(result,0,byteBuffer.remaining());
}
return result;
}catch ( IOException e ){
e.printStackTrace();
throw e;
}finally {
rf.close();
fc.close();
}
}
}