要将指定路径中的目录结构写入到一个文本文件中,怎么做?(用java)

就是将显示在控制台上的文件名写入到文本文件怎么做呢?... 就是将显示在控制台上的文件名写入到文本文件怎么做呢? 展开
 我来答
yy_baduba
2011-10-26 · TA获得超过348个赞
知道答主
回答量:82
采纳率:100%
帮助的人:134万
展开全部
很高兴回答你的问题,根据你的需求,我刚写了段代码(执行没有问题),可能比较简单,但是你要的功能(遍历子目录,写入指定文件)都以实现:
package file;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class TestFiles {

/**
* @param args
* @throws IOException
*/
public static void main(String[] args){
String mbfile = "D:\\file.txt"; //写入目录结构的目标文件
File file = new File("D:\\test");//需要读取目录
OutputStream streamOut = null;
try {
streamOut = new FileOutputStream(mbfile);
serach(file, true,streamOut);
streamOut.close();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
if(streamOut!=null)
//关闭流
streamOut.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

/**
* 遍历目录及子目录
* @param file
* @param isdepth 是否遍历子目录
* @param streamOut
* @throws IOException
*/
public static void serach(File file,boolean isdepth, OutputStream streamOut) throws IOException{
File[] files = file.listFiles();
File temp = null;
for(int i=0;i<files.length;i++){
temp = files[i];
if(temp.isDirectory()&& isdepth){
serach(temp,true,streamOut);
}
System.out.println(temp.getAbsolutePath());
streamOut.write((temp.getAbsolutePath()+"\r\n").getBytes());// 追加\r\n是代表换行
}
}
}
如有问题,请Hi我!祝学习愉快!
追问
你好,能把你的qq给我吗?我知道这样很冒昧,但是我只是想问你点问题,没有别的,因为上面的有些代码我不是很明白
追答
250267873
sub100333
2011-10-26 · TA获得超过2437个赞
知道大有可为答主
回答量:1657
采纳率:50%
帮助的人:637万
展开全部
* @param path 目标文件路径

* @param content 需要写入的内容

* @return 写入结果

*/

public static boolean writeToFile(String path, String content)

{

final int CACHE = 1024;

boolean result = false;

FileOutputStream outFile = null;

FileChannel channel = null;

// 将字符串转换为字节数组

final byte[] bt = content.getBytes();

ByteBuffer buf = null;

try

{

outFile = new FileOutputStream(path);

channel = outFile.getChannel();

// 以指定的缓存分隔字节数组,得到缓存次数

int size = bt.length / CACHE;

// 得到被缓存分隔后剩余的字节个数

int mod = bt.length % CACHE;

int start = 0;

int end = 0;

for(int i = 0; i < size + 1; i++)

{

if(i == size)

{

if(mod > 0)

{

// 分配新的字节缓冲区

buf = ByteBuffer.allocate(mod);

start = end;

end += mod;

}

else

{

break;

}

}

else

{

// 分配新的字节缓冲区

buf = ByteBuffer.allocate(CACHE);

start = end;

end = (i + 1) * CACHE;

}
// 反转缓冲区,为通道写入做好准备

buf.flip();

// 利用通道写入文件

channel.write(buf);

result = true;

}

}

catch(IOException e)

{

e.printStackTrace();

}

finally

{

// 关闭所有打开的IO流

try

{

channel.close();

outFile.close();

}

catch(IOException e)

{

e.printStackTrace();

}

}

return result;

}

/**

* 以指定的始末位置从字节数组中获取其子数组

* @param bt 原始字节数组

* @param start 起始位置

* @param end 结束位置

* @return 子字节数组

*/

private static byte[] getSubBytes(byte[] bt, int start, int end)

{

int size = end - start;

byte[] result = new byte[size];

for(int i = 0; i < size; i++)

{

result[i] = bt[i + start];

}

return result;

}

// 以指定的始末位置获取一个缓存大小的字节

byte[] bytes = getSubBytes(bt, start, end);

for(int j = 0; j < bytes.length; j++)

{

buf.put(bytes[j]);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式