您的位置:首页 > 其它

将指定的文本内容写入到指定路径的文件

2008-07-04 17:31 519 查看
/**

* 将指定的文本内容写入到指定路径的文件

* @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;

}

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

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

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

{

buf.put(bytes[j]);

}

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

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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: