您的位置:首页 > 编程语言 > Java开发

关于在文件开头添加一行内容的Java编程

2017-05-22 11:41 246 查看
首先这个问题是由于我要导入《Java编程思想》的源码所引入的。我尝试用mindview.net上所叙述的方式去build,没能成功;就先把代码直接导入项目中,然后调错。遇到的错误大都是package没有写,类比较多,批处理文件的方式也没查,既然学了Java 就想着自己写一个得了!

所以问题就出现了,怎么在多个文件的开头加上“package XXX;”。

刚开始,我是这么想的:

1.需要读出某个目录下的所有Java文件列表;

2.遍历文件,在开头添加所需字符串;

第一步很简单:

// 1.获取路径下所有Java文件
File file = new File(path);
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
});


但是,我卡在了第二步,怎么在开头添加的,io操作有追加在文件末尾的方法,但怎么在开头添加呢?突然想起来Java类库里面的RandomAccessFile,里面有一个seek(long pos)方法。可以在任意指定位置读取或写入内容。就立马行动起来了。

天不遂人愿,虽然在文件开头添加了所需的内容,但是也把原有的内容飞覆盖了。没办法,这个方法就放弃了。天无绝人之路,又想到一个方法,我可以先把原有的内容给复制出来,然后:先把所需的内容添加到开头,最后再把先前复制出来的内容给追加回去。这样应该就能完成我的目的了;

public static boolean write(String content, String path) throws IOException {
// 1.获取路径下所有Java文件
File file = new File(path);
File[] files = file.listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".java");
}
});
// 2.读取Java文件,然后在第一行加上package信息
for (File f : files) {
File tmp = File.createTempFile("tmp", <
4000
span class="hljs-keyword">null);
FileOutputStream tmpOut = new FileOutputStream(tmp);
FileInputStream tmpIn = new FileInputStream(tmp);
RandomAccessFile raf = null;
try {
raf = new RandomAccessFile(f, "rw");
byte[] buf = new byte[64];
int hasRead = 0;
while ((hasRead = raf.read(buf)) > 0) {
// 把原有内容读入临时文件
tmpOut.write(buf, 0, hasRead);
}
raf.seek(0L);
raf.write(content.getBytes());
// 追加临时文件内容
while ((hasRead = tmpIn.read(buf)) > 0) {
raf.write(buf, 0, hasRead);
}
} catch (IOException e) {
System.out.println("写入失败!");
e.printStackTrace();
return false;
} finally {
try {
raf.close();
} catch (IOException e) {
System.out.println("写入失败,关闭流失败!");
e.printStackTrace();
return false;
}
}
}
return true;
}


最终代码就是如此,虽然复用性还不是很强,但是可以解决我的问题了,哈哈~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: