if (!dir.exists() || !dir.isDirectory()) {// 判断是否存在目录
return
}
String[] files = dir.list()// 读取目录下的所有目录文件信息
for (int i = 0i <files.lengthi++) {// 循环,添加文件名或回调自身
File file = new File(dir, files[i])
if (file.isFile() &&file.getName().startsWith("exam")) {// 如果文件
fileNames.add(dir + "\\" + file.getName())
} else {// 如果是目录
dirs.add(dir)
findFileList(file,dirs,fileNames)// 回调自身继续查询
}
}
}
public static void main(String[] args) {
HashSet dirs = new HashSet()
HashSet fileNames = new HashSet()
findFileList(new File("D:\\zhidao"),dirs,fileNames)
System.out.println("目录:"+dirs)
System.out.println("exam开头的文件:"+fileNames)
}
读取文件夹下所有文件及文件夹用.list()就可以,返回文件名包括後缀名。至於文件大小你试试这个:
public void copyFile(String oldPath, String newPath) { //复制文件
//System.out.println(oldPath+"***"+newPath)
try {
//int bytesum = 0
int byteread = 0
InputStream inStream = new FileInputStream(oldPath)// 读入原文件
FileOutputStream fs = new FileOutputStream(newPath)
byte[] buffer = new byte[1024]//每次取用的大小
while ((byteread = inStream.read(buffer)) != -1) {
//bytesum += byteread// 字节数 文件大小
//System.out.println(bytesum)
fs.write(buffer, 0, byteread)
}
inStream.close()
}catch (Exception e) {
System.out.println("copy file error")
e.printStackTrace()
}
}
把注释去了,里面的bytesum就是文件大小。
import java.io.*import java.util.ArrayList
import java.util.Iterator
import java.util.List
/**
* 读取目录及子目录下指定文件名的路径 并放到一个数组里面返回遍历
* @author zdz8207
*
*/
public class FileViewer {
public static void main(String[] args) {
//List arrayList = FileViewer.getListFiles("d:/com","html",true)
//读取d:/com下的以java 结尾的文件 如有子目录,包含之(后缀名为null则为所有文件)
//List arrayList = FileViewer.getListFiles("d:/com","java",true)
//经试验,后缀不能不填写,否则编译不通过,提示“FileViewer.java:17: 非法的表达式开始”。
//另外后缀为""时的情况需要 增加到IF 里去,否则 后缀为""时,不会显示所有文件
List arrayList = FileViewer.getListFiles("d:/com","",true)
if(arrayList.isEmpty())
{
System.out.println("没有符号要求的文件")
}
else
{
String message = ""
message += "符号要求的文件数:" + arrayList.size() + "\r\n"
System.out.println(message)
for (Iterator i = arrayList.iterator()i.hasNext())
{
String temp = (String) i.next()
System.out.println(temp)
message += temp + "\r\n"
}
//将显示的文件路径写到指定的文件里,若文件不存在,则提示IO异常
//java.io.FileNotFoundException: d:\ajax\menu.txt (系统找不到指定的路径。)
//如果 加个文件是否存在的判断,如不存在就在当前目录新建一个,则更好。
appendMethod("d:/menu.txt",message)
}
}
public static List<String>fileList = new ArrayList<String>()
/**
*
* @param path 文件路径
* @param suffix 后缀名
* @param isdepth 是否遍历子目录
* @return
*/
public static List getListFiles(String path, String suffix, boolean isdepth)
{
File file = new File(path)
return FileViewer.listFile(file ,suffix, isdepth)
}
public static List listFile(File f, String suffix, boolean isdepth)
{
//是目录,同时需要遍历子目录
if (f.isDirectory() &&isdepth == true)
{
File[] t = f.listFiles()
for (int i = 0i <t.lengthi++)
{
listFile(t[i], suffix, isdepth)
}
}
else
{
String filePath = f.getAbsolutePath()
System.out.println("suffix = "+suffix)
if(suffix =="" || suffix == null)
{
//后缀名为null则为所有文件
System.out.println("----------------")
fileList.add(filePath)
}
else
{
int begIndex = filePath.lastIndexOf(".")//最后一个.(即后缀名前面的.)的索引
String tempsuffix = ""
if(begIndex != -1)//防止是文件但却没有后缀名结束的文件
{
tempsuffix = filePath.substring(begIndex + 1, filePath.length())
}
if(tempsuffix.equals(suffix))
{
fileList.add(filePath)
}
System.out.println("|||||||||||||||||||")
}
}
return fileList
}
/**
* 方法追加文件:使用FileWriter
* @param fileName
* @param content
*/
public static void appendMethod(String fileName, String content)
{
try
{
//打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
FileWriter writer = new FileWriter(fileName, true)
writer.write(content + "\r\n")
writer.close()
}
catch (IOException e)
{
e.printStackTrace()
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)