要将指定路径中的目录结构写入到一个文本文件中,怎么做?(用java)
发布网友
发布时间:2022-05-12 22:45
我来回答
共2个回答
热心网友
时间:2023-10-27 18:54
很高兴回答你的问题,根据你的需求,我刚写了段代码(执行没有问题),可能比较简单,但是你要的功能(遍历子目录,写入指定文件)都以实现:
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
热心网友
时间:2023-10-27 18:55
* @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]);