为什么我这个连文件夹也装进集合了?实在是找不到

weixin_42504422 2018-06-22 01:12:03
public static List<String> list = new ArrayList<String>();
public static List<String> tongJi(File file) {
File[] f = file.listFiles(new MyFilter());
for(File ff : f) {
if(ff.isDirectory()) {
tongJi(ff);
}
list.add(ff.getAbsolutePath());
}
return list;
}

import java.io.File;
import java.io.FileFilter;

public class MyFilter implements FileFilter {
public boolean accept(File pathname) {
if(pathname.isFile()) {
return pathname.getName().endsWith("txt");
}
return true;
}
}
...全文
144 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
stacksoverflow 2018-06-22
  • 打赏
  • 举报
回复
引用 16 楼 qq_42519560 的回复:
搞好了,重新new File(get(i)),加在写的后面

qq_42519560 2018-06-22
  • 打赏
  • 举报
回复
搞好了,重新new File(get(i)),加在写的后面
stacksoverflow 2018-06-22
  • 打赏
  • 举报
回复
引用 14 楼 qq_42519560 的回复:
其实就是一个文件夹里面有多个子文件夹,然后我筛选出txt文档,再把这些txt文档全部复制到另一目录,目前就学到io流读写这里

那只能循环读,然后一个一个写了。
qq_42519560 2018-06-22
  • 打赏
  • 举报
回复
其实就是一个文件夹里面有多个子文件夹,然后我筛选出txt文档,再把这些txt文档全部复制到另一目录,目前就学到io流读写这里
qq_42519560 2018-06-22
  • 打赏
  • 举报
回复
引用 11 楼 stacksoverflow 的回复:
你直接这么做复制吧

try {
Files.copy(new FileInputStream(new File("c:/temp/a/a.txt")), FileSystems.getDefault ().getPath("c:/temp/b/b.txt"));
} catch (FileNotFoundException e) {
//文件不存在时的业务处理
System.out.println(e.getMessage());
} catch (IOException e) {
//
}


你这个好像没还学过
stacksoverflow 2018-06-22
  • 打赏
  • 举报
回复
引用 10 楼 qq_42519560 的回复:
[quote=引用 8 楼 stacksoverflow 的回复:]
[quote=引用 7 楼 qq_42519560 的回复:]
[quote=引用 3 楼 stacksoverflow 的回复:]
[quote=引用 2 楼 weixin_42504422 的回复:]
if只有一句不加不是也可以么

if只有一句说的是可以不加大括号,不是可以不加else
[/quote]
我还是楼主,这个提示我d:\wang这个文件夹拒绝访问什么原因我是新手[/quote]
fw = new FileWriter("d:\\wang")
只能写入文件,不能写入文件夹(d:\wang是文件夹)

文件夹只能读,不能写。

[/quote]
我知道意思了,但是多文件复制,难道写的时候文件名也要遍历一遍么[/quote]
直接复制整个目录的话,参考这个例子

String source = "C:/your/source";
File srcDir = new File(source);

String destination = "C:/your/destination";
File destDir = new File(destination);

try {
FileUtils.copyDirectory(srcDir, destDir);
} catch (IOException e) {
e.printStackTrace();
}
stacksoverflow 2018-06-22
  • 打赏
  • 举报
回复
你直接这么做复制吧

try {
Files.copy(new FileInputStream(new File("c:/temp/a/a.txt")), FileSystems.getDefault ().getPath("c:/temp/b/b.txt"));
} catch (FileNotFoundException e) {
//文件不存在时的业务处理
System.out.println(e.getMessage());
} catch (IOException e) {
//
}
qq_42519560 2018-06-22
  • 打赏
  • 举报
回复
引用 8 楼 stacksoverflow 的回复:
[quote=引用 7 楼 qq_42519560 的回复:]
[quote=引用 3 楼 stacksoverflow 的回复:]
[quote=引用 2 楼 weixin_42504422 的回复:]
if只有一句不加不是也可以么

if只有一句说的是可以不加大括号,不是可以不加else
[/quote]
我还是楼主,这个提示我d:\wang这个文件夹拒绝访问什么原因我是新手[/quote]
fw = new FileWriter("d:\\wang")
只能写入文件,不能写入文件夹(d:\wang是文件夹)

文件夹只能读,不能写。

[/quote]
我知道意思了,但是多文件复制,难道写的时候文件名也要遍历一遍么
qq_42519560 2018-06-22
  • 打赏
  • 举报
回复
引用 8 楼 stacksoverflow 的回复:
[quote=引用 7 楼 qq_42519560 的回复:]
[quote=引用 3 楼 stacksoverflow 的回复:]
[quote=引用 2 楼 weixin_42504422 的回复:]
if只有一句不加不是也可以么

if只有一句说的是可以不加大括号,不是可以不加else
[/quote]
我还是楼主,这个提示我d:\wang这个文件夹拒绝访问什么原因我是新手[/quote]
fw = new FileWriter("d:\\wang")
只能写入文件,不能写入文件夹(d:\wang是文件夹)

文件夹只能读,不能写。

[/quote]
我写到d盘,它跟我说找不到路径
stacksoverflow 2018-06-22
  • 打赏
  • 举报
回复
引用 7 楼 qq_42519560 的回复:
[quote=引用 3 楼 stacksoverflow 的回复:]
[quote=引用 2 楼 weixin_42504422 的回复:]
if只有一句不加不是也可以么

if只有一句说的是可以不加大括号,不是可以不加else
[/quote]
我还是楼主,这个提示我d:\wang这个文件夹拒绝访问什么原因我是新手[/quote]
fw = new FileWriter("d:\\wang")
只能写入文件,不能写入文件夹(d:\wang是文件夹)

文件夹只能读,不能写。

qq_42519560 2018-06-22
  • 打赏
  • 举报
回复
引用 3 楼 stacksoverflow 的回复:
[quote=引用 2 楼 weixin_42504422 的回复:]
if只有一句不加不是也可以么

if只有一句说的是可以不加大括号,不是可以不加else
[/quote]
我还是楼主,这个提示我d:\wang这个文件夹拒绝访问什么原因我是新手
weixin_42504422 2018-06-22
  • 打赏
  • 举报
回复
ff.close();
}catch (IOException ex) {
System.out.println(ex);
throw new RuntimeException("释放资源失败");
}
}
}
}
}
weixin_42504422 2018-06-22
  • 打赏
  • 举报
回复
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class ZuoYe1 {
public static void main(String[] args) throws IOException{
File file = new File("d:\\asd");
List<String> ll = tongJi(file);
for(String s : ll) {
System.out.println(s);
}
FileReader ff = null;
FileWriter fw = null;
for(int i = 0;i<ll.size();i++) {
try {
ff = new FileReader(ll.get(i));
fw = new FileWriter("d:\\wang");
char[] chars = new char[1024];
int len = 0;
while((len = ff.read(chars)) != -1){
fw.write(chars, 0, len);
fw.close();
}
}catch(IOException ex) {
System.out.println(ex);
throw new RuntimeException("复制失败");
}finally {
try{
if(fw!=null)
fw.close();
}catch(IOException ex){
System.out.println(ex);
throw new RuntimeException("释放资源失败");
}finally {
try {
if(ff!=null)
weixin_42504422 2018-06-22
  • 打赏
  • 举报
回复
好吧,谢谢了
stacksoverflow 2018-06-22
  • 打赏
  • 举报
回复
引用 2 楼 weixin_42504422 的回复:
if只有一句不加不是也可以么

if只有一句说的是可以不加大括号,不是可以不加else
weixin_42504422 2018-06-22
  • 打赏
  • 举报
回复
if只有一句不加不是也可以么
stacksoverflow 2018-06-22
  • 打赏
  • 举报
回复
少了个else

for(File ff : f) {
if(ff.isDirectory()) {
tongJi(ff);
} else {
list.add(ff.getAbsolutePath());
}
}

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧