黑马程序员技术交流社区
标题:
IO流读写数据
[打印本页]
作者:
谢冬
时间:
2013-3-10 17:44
标题:
IO流读写数据
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
/**
* 需求:把i盘目录下的所有.java结尾的文件路径存储到一个文件中,方便查找
* @author xiedong
*
*/
public class ShowPath {
public static void main(String[] args) throws IOException {
//封装数据
File file1 = new File("I://");
//创建集合,保存数据
ArrayList<File> al = new ArrayList<File>();
getJavaFile(file1, al);
//封装目的地
File file2 = new File("i://codepath.txt");
getJavaFilePath(al, file2);
}
/**
* 写入数据
* @param al
* @param file2
* @throws IOException
*/
private static void getJavaFilePath(ArrayList<File> al, File file2) throws IOException {
// TODO Auto-generated method stub
BufferedWriter bw = new BufferedWriter(new FileWriter(file2));
for(File fileItem : al)
{
bw.write(fileItem.getAbsolutePath());
bw.newLine();
bw.flush();
}
bw.close();
}
/**
* 获取java文件的方法
* @param file
* @param al
* @throws IOException
*/
private static void getJavaFile(File file, ArrayList<File> al) throws IOException {
File[] files = file.listFiles();
for(File fileItem : files)
{
if(fileItem.isDirectory())
{
getJavaFile(fileItem, al);
}else
{
if(file.getName().endsWith(".java"))
{
//将数据存入集合
al.add(fileItem);
}
}
}
}
}
上面程序无法将i盘下面所有的java文件路径,写入知道位置,这是错在了哪里?
作者:
夏振博
时间:
2013-3-10 18:02
如果要直接访问盘符下文件 for()循环下要判断下 { }
for(File fileItem : files)
{
if (fileItem != null) {
if(fileItem.isDirectory())
{
getJavaFile(fileItem, al);
}else
{
if(file.getName().endsWith(".java"))
{
//将数据存入集合
al.add(fileItem);
}
}
}
}
复制代码
作者:
谢洋
时间:
2013-3-10 18:11
public class ShowPath {
public static void main(String[] args) throws IOException {
//封装数据
File file1 = new File("I://");//路径格式错误
//创建集合,保存数据
ArrayList<File> al = new ArrayList<File>();
getJavaFile(file1, al);
//封装目的地
File file2 = new File("i://codepath.txt");//路径格式错误
getJavaFilePath(al, file2);
}
/**
* 写入数据
* @param al
* @param file2
* @throws IOException
*/
private static void getJavaFilePath(ArrayList<File> al, File file2) throws IOException {
// TODO Auto-generated method stub
BufferedWriter bw = new BufferedWriter(new FileWriter(file2));
for(File fileItem : al)
{
bw.write(fileItem.getAbsolutePath());
bw.newLine();
bw.flush();
}
bw.close();
}
/**
* 获取java文件的方法
* @param file
* @param al
* @throws IOException
*/
private static void getJavaFile(File file, ArrayList<File> al) throws IOException {
File[] files = file.listFiles();
for(File fileItem : files)
{
if(fileItem.isDirectory())
{
getJavaFile(fileItem, al);
}else
{
if(file.getName().endsWith(".java"))//应该改为fileItem.getName().endsWith(".java");
{
//将数据存入集合
al.add(fileItem);
}
}
}
}
}
作者:
马甲大王
时间:
2013-3-10 18:16
public File[] listFiles()
返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。
如果此抽象路径名不表示一个目录,那么此方法将返回 null。否则返回一个 File 对象数组,
还要判断是否为null,
hehe
作者:
戴乾刚
时间:
2013-3-10 19:02
File对象代表一个具体的文件或文件夹,不能将硬盘分区封装成File对象
File file1 = new File("I://");发生空指针异常。
如果真的能封装成File对象,试问当要创建这个文件时,文件应该创建在哪个目录下
if(file.getName().endsWith(".java"))应该是fileItem.getName()
作者:
陈丽莉
时间:
2013-3-10 19:39
如果有解决问题的答案,请回复他告知,之后将帖子分类改成【已解决】,多谢合作~
作者:
张宁
时间:
2013-3-11 00:01
public class ShowPath {
public static void main(String[] args) throws IOException {
//封装数据
File file1 = new File("I://");//
//创建集合,保存数据
ArrayList<File> al = new ArrayList<File>();
getJavaFile(file1, al);
//封装目的地
File file2 = new File("i://codepath.txt");
getJavaFilePath(al, file2);
}
复制代码
你这里的路径 // 不对啦,应该是\\,改好之后,你的codepath.txt 就可以在你的I盘看见啦,
还有啦。if(file.getName().endsWith(".java"))应该改为fileItem.getName().endsWith(".java"); 小细节,细心一点了。
作者:
陈丽莉
时间:
2013-3-12 13:52
再次提醒,如果还有问题,请继续追问,没有问题,请将帖子分类改成【已解决】。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2