黑马程序员:Java基础总结
递归的应用&File流的应用
递归:功能自身的调用
注意事项:
定义递归结束的条件;次数不要过多,否则出现StackOverflowError:栈内存溢出错误。
例一:
列出指定目录下文件或者文件夹,包含子目录中的内容。也就是列出指定目录下所有内容
public
static
void
showDir(File dir,
int
level)
{
System.
out
.println( getLevel(level)+dir.getName());
level++;
File[] files = dir.listFiles();
for
(
int
x=0; x<files.
length
; x++)
{
if
(files[x].isDirectory())
showDir(files[x],level);
else
System.
out
.println( getLevel(level)+files[x]);
}
}
例二:
将一个指定目录下的java文件的绝对路径,存储到一个文本文件中。
建立一个java文件列表文件。
思路:
1,对指定的目录进行递归。
2,获取递归过程所以的java文件的路径。
3,将这些路径存储到集合中。
4,将集合中的数据写入到一个文件中
建立一个java文件列表文件。
思路:
1,对指定的目录进行递归。
2,获取递归过程所以的java文件的路径。
3,将这些路径存储到集合中。
4,将集合中的数据写入到一个文件中
File dir =
new
File(
"d:\\java1223"
);
List<File> list =
new
ArrayList<File>();
fileToList(dir,list);
File file =
new
File(dir,
"javalist.txt"
);
writeToFile(list,file.toString());
public
static
void
fileToList(File dir,List<File> list)
{
File[] files = dir.listFiles();
for
(File file : files)
{
if
(file.isDirectory())
fileToList(file,list);
else
{
if
(file.getName().endsWith(
".java"
))
list.add(file);
}
}
}
例三:
删除一个带内容的目录。
删除原理:
在window中,删除目录从里面往外删除的。
既然是从里往外删除。就需要用到递归
删除原理:
在window中,删除目录从里面往外删除的。
既然是从里往外删除。就需要用到递归
File流
public
static
void
merge()
throws
IOException {
ArrayList<FileInputStream> al =
new
ArrayList<FileInputStream>();
for
(
int
x = 1; x <= 3; x++) {
al.add(
new
FileInputStream(
"c:\\splitfiles\\"
+ x +
".part"
));
}
final
Iterator<FileInputStream> it = al.iterator();
Enumeration<FileInputStream> en =
new
Enumeration<FileInputStream>() {
public
boolean
hasMoreElements() {
return
it.hasNext();
}
public
FileInputStream nextElement() {
return
it.next();
}
};
SequenceInputStream sis =
new
SequenceInputStream(en);
FileOutputStream fos =
new
FileOutputStream(
"c:\\splitfiles\\0.bmp"
);
byte
[] buf =
new
byte
[1024];
int
len = 0;
while
((len = sis.read(buf)) != -1) {
fos.write(buf, 0, len);
}
fos.close();
sis.close();
}
public
static
void
splitFile()
throws
IOException {
FileInputStream fis =
new
FileInputStream(
"c:\\1.bmp"
);
FileOutputStream fos =
null
;
byte
[] buf =
new
byte
[1024 * 1024];
int
len = 0;
int
count = 1;
while
((len = fis.read(buf)) != -1) {
fos =
new
FileOutputStream(
"c:\\splitfiles\\"
+ (count++) +
".part"
);
fos.write(buf, 0, len);
fos.close();
}
fis.close();
}