用java编写程序,键盘输入一个目录名称,要求分别输出该目录中所有子目录名和以exam开头的文件名。

用java编写程序,键盘输入一个目录名称,要求分别输出该目录中所有子目录名和以exam开头的文件名。,第1张

public static void findFileList(File dir,HashSet dirs,HashSet fileNames ) {

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()

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12108088.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存