A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 格子、 高级黑马   /  2014-6-4 19:33  /  1565 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 格子、 于 2014-6-5 10:41 编辑

今天学到了IO流,跟着毕老师做了一个指定目录下的java文件的绝对路径,存储到一个文本文件中的练习,不知道为什么编译没错,一运行就抛Runtime异常,说是目录无法访问,捣鼓半天没明白咋回事。。。求科普!!!求解释!!!
  1. import java.io.*;
  2. import java.util.*;
  3. class FileListWriteDemo
  4. {
  5.         public static void main(String[] args) throws IOException
  6.         {
  7.                 List<File> list = new ArrayList<File>();
  8.                 File f = new File("d:\\a");
  9.                 String s = "d:\\java";
  10.                 listDemo(f,list);
  11.                 System.out.println(list.size());
  12.                 File f1 = new File("d:\\java");
  13.                 writerDemo(list,f1.toString());
  14.         }
  15.         //遍历文件夹 将文件夹存入集合
  16.         public static void listDemo(File f,List<File> ls)
  17.         {
  18.                 File[] f1 = f.listFiles();
  19.                 for(File ff:f1)
  20.                 {
  21.                         if(ff.isDirectory())
  22.                                 listDemo(ff,ls);
  23.                         else
  24.                         {
  25.                                 if(ff.getName().endsWith(".java"))
  26.                                 ls.add(ff);
  27.                         }
  28.                                 
  29.                 }
  30.         }
  31.         //将集合打印成文件
  32.         public static void writerDemo(List<File> ls,String s)throws IOException
  33.         {
  34.                 BufferedWriter bw =null;
  35.                 try
  36.                 {
  37.                          bw = new BufferedWriter(new FileWriter(s));
  38.                          for(File f:ls)
  39.                         {
  40.                                 String path = f.getAbsolutePath();        
  41.                                 bw.write(path);
  42.                                 bw.newLine();
  43.                                 bw.flush();        
  44.                         }
  45.                                 
  46.                 }
  47.                 catch (IOException e)
  48.                 {
  49.                         throw e;
  50.                 }
  51.                 finally
  52.                 {
  53.                         try
  54.                         {
  55.                                 if(bw!=null)
  56.                                         bw.close();
  57.                         }
  58.                         catch (IOException e)
  59.                         {
  60.                                 throw e;
  61.                         }
  62.                 }

  63.                
  64.         }
  65. }
复制代码


评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

9 个回复

倒序浏览
File f = new File("d:\\a");你确定你的电脑D盘里有a文件夹么?
并且还有个小问题第九行String s = "d:\\java";这句话没有用到啊?!
回复 使用道具 举报
同意楼上的观点
回复 使用道具 举报
package com.itheima.exam1;

import java.io.*;
import java.util.*;

class FileListWriteDemo
{

    public static void main(String[] args) throws IOException
    {
        List<File> list = new ArrayList<File>();
        File f = new File("D:\\资料");

        String s = "d:\\java1";
        listDemo(f, list);
        System.out.println(list.size());
        //把S传入f1对象

        File f1 = new File(s);
        //把f1传给writerDemo函数
        writerDemo(list, f1);
    }

    // 遍历文件夹 将文件夹存入集合
    public static void listDemo(File f, List<File> ls)
    {
        File[] f1 = f.listFiles();
        for (File ff : f1)
        {
            if (ff.isDirectory())
                listDemo(ff, ls);
            else
            {
                if (ff.getName().endsWith(".java"))
                    ls.add(ff);
            }

        }
    }

    // 将集合打印成文件
    public static void writerDemo(List<File> ls, File s) throws IOException/**这里应该传入一个File参数*/
    {
       // FileWriter fw = new FileWriter("");
        BufferedWriter bw = null;
        try
        {//FileWriter对象需要传入File对象 ,要不就直接传入字符串路径。
            bw = new BufferedWriter(new FileWriter(s));
            for (File f : ls)
            {
                String path = f.getAbsolutePath();
                bw.write(path);
                bw.newLine();
                bw.flush();
            }

        } catch (IOException e)
        {
            throw e;
        } finally
        {
            try
            {
                if (bw != null)
                    bw.close();
            } catch (IOException e)
            {
                throw e;
            }
        }

    }
}
//最后建议是些变量名,最好写一眼就能看懂是什么意思,你写单个字母 ,时间久了自己就不知道怎么回事啦
回复 使用道具 举报
crazystraw 发表于 2014-6-4 20:20
File f = new File("d:\\a");你确定你的电脑D盘里有a文件夹么?
并且还有个小问题第九行String s = "d:\\jav ...

很明显,这是我在不断调试程序并没没有及时修正,然后就是,我的目录是肯定存在的,否则也不会去访问,真正的问题出在了String s或者File对象上,我封装的是目录,是不是文件!!!所以才会出现访问失败的异常,随便加个扩展名问题就解决了。。。这纯粹是粗心导致的
回复 使用道具 举报
多一点 发表于 2014-6-4 21:19
package com.itheima.exam1;

import java.io.*;

哥们,你依旧没找到问题所在哦,之所以无法访问,是因为在存放目录的时候,file封装的是目录而不是文件,找不到写入文件才会导致访问失败,然后就是这代码是没有优化过的,所以看着会比较乱。。。习惯性的在成功完成后才会去更正,怕到时候思路就断了。。。
回复 使用道具 举报
格子、 发表于 2014-6-5 10:40
哥们,你依旧没找到问题所在哦,之所以无法访问,是因为在存放目录的时候,file封装的是目录而不是文件, ...

代码我运行过没有问题

点评

能运行不代表没问题哦,真正的问题所在可以看楼下。。。  发表于 2014-6-5 11:51
回复 使用道具 举报
File f = new File("d:\\a")这代表是一个目录,不是一个文件,先区分文件和目录的区别

点评

这个确实是啊,刚开始没在意,后来才发现是这样一个错误。。囧  发表于 2014-6-5 11:43

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马