关于在文件开头添加一行内容的Java编程
2017-05-22 11:41
246 查看
首先这个问题是由于我要导入《Java编程思想》的源码所引入的。我尝试用mindview.net上所叙述的方式去build,没能成功;就先把代码直接导入项目中,然后调错。遇到的错误大都是package没有写,类比较多,批处理文件的方式也没查,既然学了Java 就想着自己写一个得了!
所以问题就出现了,怎么在多个文件的开头加上“package XXX;”。
刚开始,我是这么想的:
1.需要读出某个目录下的所有Java文件列表;
2.遍历文件,在开头添加所需字符串;
第一步很简单:
但是,我卡在了第二步,怎么在开头添加的,io操作有追加在文件末尾的方法,但怎么在开头添加呢?突然想起来Java类库里面的RandomAccessFile,里面有一个seek(long pos)方法。可以在任意指定位置读取或写入内容。就立马行动起来了。
天不遂人愿,虽然在文件开头添加了所需的内容,但是也把原有的内容飞覆盖了。没办法,这个方法就放弃了。天无绝人之路,又想到一个方法,我可以先把原有的内容给复制出来,然后:先把所需的内容添加到开头,最后再把先前复制出来的内容给追加回去。这样应该就能完成我的目的了;
最终代码就是如此,虽然复用性还不是很强,但是可以解决我的问题了,哈哈~~~
所以问题就出现了,怎么在多个文件的开头加上“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; }
最终代码就是如此,虽然复用性还不是很强,但是可以解决我的问题了,哈哈~~~
相关文章推荐
- Python 实现在对一个目录下所有文件,指定某一行之后添加内容(批处理脚本)
- java编程之合并两个文件内容
- Java使用FileWriter和BufferedWriter添加内容到文件末尾
- 关于java中创建文件,并且写入内容
- Android 关于文件及文件夹的创建 、删除、重命名、复制拷贝、添加内容、修改内容、读取内容
- java io在文件结尾持续添加内容
- 关于java中创建文件,并且写入内容
- 文件每一行前行后添加内容
- Java 程序 关于Properties 类使用Store方法时不能会覆盖以前Properties 文件的内容
- java 怎样向一个已存在的文件中添加内容
- 在文件末尾添加一行字符串的方法(JAVA)
- javaIo文件中添加内容追加String
- 关于java读取和写入properties配置文件的内容
- 关于java中创建文件,并且写入内容
- Java中向文件末尾添加内容
- 使用Java的输入输出流技术将Input.txt的内容逐行读出,每读出一行就顺序为其添加行号(从1开始,逐行递增),并写入到另一个文本文件Output.txt中
- 6.1学习内容 ndk编程释放内存,C语言中char*添加字符得方法,java二维数组的读取与生成
- java IO编程——复制一个文件中的内容到另一个文件
- git blame 可以查看文件中的某一行内容是在哪个commit id号添加的
- java编程思想——递归的方式,添加目录和文件