- 浏览: 114789 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (98)
- java (27)
- jms (2)
- jta (0)
- 性能调优及内存分析 (4)
- 设计模式 (14)
- 框架 (6)
- 其它 (9)
- job (1)
- maven (1)
- 服务器 (2)
- 分布式 (3)
- ibatis (1)
- linux (0)
- mysql (0)
- 并发编程 (0)
- java多线程 (2)
- 前端跨域 (1)
- 线程dump分析 (0)
- velocity (0)
- 数据库 (2)
- 协议 (0)
- 监控 (0)
- 开源软件 (2)
- 算法 (0)
- 网络 (1)
- spring (1)
- 编码 (0)
- 数据结构 (0)
- HTable和HTablePool使用注意事项 (0)
- opencms (0)
- android (16)
- 操作系统 (2)
- top (0)
最新评论
-
hold_on:
@Override public boolea ...
android listview的HeadView左右切换图片(仿新浪,网易,百度等切换图片) -
achersnake:
123
Servlet中listener(监听器)和filter的总结 -
angel243fly:
我用了这个方法,还是报同样的错误,还有什么建议吗?
eclipse提示CreateProcess error=87错误的解决方法
转:http://stoneli88.iteye.com/blog/891288
在对文件进行写入操作时,我们经常会碰到的一个棘手的问题可能是:如何在一个已经有内容的文件末尾写入新数据而不覆盖掉原来的内容?现在本人介绍以下四种方法:
首先,假设在程序的当前目录中有一个文件“data.txt”,该文件中已经有内容,现在要进行的操作是在data.txt文件末尾定放字符串"Write in the end".
法一:
在FileOutputStream 或者 FileWriter 的构造器中加个参数 “true”,就如:
- FileOutputStream fos = new FileOutputStream( "data.txt" , true );
- //加个参数true表示在文件末尾写入,不加或者加上false表示在文件开头处定入
- fos.write("Write in the end" .getBytes()); //用write(byte[] b)写入字符串
- fos.close();//记得关闭文件流
或者可以用FileWriter
- FileWriter fos = new FileWriter( "data.txt" , true ); //同样加个参数true
- fos.write("Write in the end" ); //该类有不同于FileOutputStream的write(String s)
- fos.close();
法二:
利用java.nio.channel包里面的FileChannel类,该类有个position(long
newPosition),参数newPosition表示“计算从文件开始的字节数
”该方法的功能就是把指针位置设置在文件的newPosition处,而文件的末尾我们可以用FileChannel.size()来得到!也就是我们用
position(FileChannel.size())
就可以把指针指向末尾,从而写入新数据,就如:
- FileChannel fc = new RandomAccessFile( "data.txt" , "rw" ).getChannel(); // rw模式
- //必须用RandomAccessFile("data.txt", "rw").getChannel();
- //而不能用FileOutputStream.getChannel
- fc.position(fc.size()); // //把指针移到文件末尾
- fc.write(ByteBuffer.wrap("Write in the end " .getBytes())); //写入新数据
- fc.close()
- //如果我们硬是要用FileOutputStream.getChannel,可以写成:
- FileChannel fc = new FileOutputStream( "data.txt" , true ).getChannel(); //参数true也必须加上
- fc.position(fc.size());
- fc.write(ByteBuffer.wrap("Write in the end " .getBytes()));
- fc.close();
法三:
用RandomAccess类的seek(long pos)代替方法二的position(long newPosition),不多讲,看例题:
- RandomAccessFile rf = new RandomAccessFile( "data.txt" , "rw" );
- rf.seek(rf.length()); //length()方法,而不是上面的size()
- rf.writeChars("Write in the end" ); //wiriteChars写入字符串,写入的字符串中的每个字符在文件中都是占两个字节,比如write在文件中看到的是 w r i t e 。
法四:
利用FileChannel的 map(FileChannel.MapMode mode,long position,long
size)方法创建一个MappedByteBuffer(内存映射文件),但是可“读/写”的MappedByteBuffer必须通过
RandomAccessFile.getChannel.map()来创建,因为FileChannel.MapMode(文件映射模式的类型)只有三
种:
1,MapMode.READ_ONLY 只读
2,MapMode.READ_WRITE 读/写
3,MapMode.PRIVATE 专用
而我们要在文件末尾写入的话就必须有到“写文件”,也就是要用到MapMode.READ_WRITE
,如果我们用FileInputStream或者FileOutputStream来获取通道的话都是“只读”或者“只写”,就没办法与
MapMode.READ_WRITE
搭配起来,所以我们只能通过RandomAccessFile的"rw"模式来与MapMode.READ_WRITE搭配。
map方法中的参数:
1.mode :根据是按只读、读取/写入或专用(写入时拷贝)来映射文件,分别为 2.FileChannel.MapMode 类 中所定义的 READ_ONLY、READ_WRITE 或 PRIVATE 之一
3.position : 文件中的位置,映射区域从此位置开始;必须为非负数
4.size: 要映射的区域大小;必须为非负数且不大于 Integer.MAX_VALUE
有了position与size这两个参数,我们就可以把position设置为原文件的末尾,然后再写入size字节数
现在让我们一起来看下如何在文件末尾写入:
- FileChannel fc = new RandomAccessFile( "data.txt" , "rw" ).getChannel();
- long length = fc.size(); //有来设置映射区域的开始位置
- MappedByteBuffer mbb = fc.map(FileChannel.MapMode.READ_WRITE,length,20 );
- //由于要写入的字符串"Write in the end"占16字节,所以长度设置为20就足够了
- mbb.put("Write in the end" .getBytes()); //写入新数据
发表评论
-
公钥,私钥和数字签名这样最好理解
2012-12-04 13:01 0一、公钥加密 假设一下,我找了两个数字,一个是1,一个是2 ... -
btrace学习二--btrace一个简单例子
2012-11-09 16:28 0btrace安装好了,就看一些语法吧。可以到btrace的官方 ... -
Java解析XML汇总(DOM/SAX/JDOM/DOM4j/XPath)
2012-10-25 20:27 0【目录】 一、【基础知识——扫盲】 二、【DOM、S ... -
BTrace使用简介
2012-05-23 16:23 932转:http://rdc.taobao.com/team/ ... -
java初始化顺序
2012-05-14 15:39 0转:http://www.cnblogs.com/miniwi ... -
HTMLDecoder,&#开头的编码换转成中文
2012-05-11 10:06 1147转:http://blog.sina.com.cn/s/blo ... -
类初始化顺序
2012-04-09 17:33 0转:http://www.cnblogs.com/miniwi ... -
Heritrix的eclipse配置启动
2012-04-07 11:46 0转:http://blog.csdn.net/lifesoft ... -
执行Runtime.exec异常: error=12,Cannot allocate memory
2012-03-26 10:03 1285转:http://blog.csdn.net/chifen ... -
使用Memory Analyzer tool(MAT)分析内存泄漏(二) ZZ
2012-03-13 08:41 1212http://www.blogjava.net/rose ... -
使用Memory Analyzer tool(MAT)分析内存泄漏(一)
2012-03-13 08:40 885转: http://www.blogjava.net/ro ... -
Java编程中“为了性能”尽量要做到的一些地方
2012-03-12 12:52 0最近的机器内存又爆满了,除了新增机器内存外,还应该好好revi ... -
Java内存模型
2012-02-23 19:57 0(原本准备把内存模型单独放到某一篇文章的某个章节里面讲解,后来 ... -
Runnable、Callable、Executor、Future关系解读
2012-02-22 10:02 0在再度温习Java5的并发编程的知识点时发现,首要的就是把Ru ... -
HashCode本质
2012-02-22 09:05 01.hashcode是用来查找的, ... -
Java并发--任务执行.
2012-02-17 19:40 0PS: 发到博客的文章竟然发布不到论坛, 所以将文章从博客 ... -
java并发编程-Executor框架
2012-02-17 19:39 0Executor框架是指java 5中引入的一系列并发库中 ... -
Java 并发核心编程
2012-02-17 16:28 0内容涉及: 1、关于java ... -
future使用
2012-02-17 14:53 0在Java中,如果需要设 ... -
常用 Java 静态代码分析工具的分析与比较
2012-02-16 14:20 0转:http://www.ibm.com/develope ...
相关推荐
9. **NIO(非阻塞I/O)**:Java NIO API(New IO)提供了一种新的方式来处理I/O,它允许进行非阻塞的读写操作,适用于大文件和高并发的场景。 10. **文件路径**:在Java中,文件路径可以是相对路径或绝对路径。相对...
在Java编程语言中,文件读写操作是程序与外部数据交互的基本能力。这篇学习笔记将带你初探这个领域,适合新手入门。我们将讨论如何使用Java进行文件的读取、写入以及一些常见的应用场景。 首先,Java提供了java.io...
传统IO流的方式通常包括创建一个InputStream来读取源文件,再创建一个OutputStream来写入目标文件,然后使用循环读取和写入数据。 4. **复制文件的步骤**: - 打开源文件的InputStream。 - 创建目标文件的...
- 如果希望在文件末尾追加内容,可以在创建`FileOutputStream`时传入`true`作为第二个参数,如`new FileOutputStream(file, true)`。 通过以上知识点,我们可以实现对文件的各种操作,包括创建、读取、写入、移动...
- 在读取源文件内容后,你可以选择追加到已有文件末尾,或者覆盖已有内容。如果是追加,可以使用`FileWriter`的构造函数指定`append`参数为`true`。 - 示例代码(追加内容): ```java FileWriter writer = new ...
在Java中,我们可以使用InputStream类来读取数据,OutputStream类来写入数据。这两个类都是抽象类,不能直接实例化,但它们有许多子类可以用于不同的输入/输出场景。在文件复制中,我们通常使用FileInputStream和...
在Java中,可以利用NIO(New I/O)中的`FileChannel`类和`ByteBuffer`类来进行高效的文件复制。下面将详细介绍这种方法的具体实现。 #### 示例代码解析 以下是一个使用`FileChannel`和`ByteBuffer`进行文件复制的...
使用`FileWriter`的构造函数可以指定是否在文件末尾追加内容,避免覆盖已有数据。 以上就是Java中常见的文件读写方式,每种方法都有其适用的场景,开发者应根据实际需求选择合适的方法。理解并熟练掌握这些技术...
- **追加模式**:使用`FileWriter`的构造函数设置`true`参数,可以使写入的数据追加到文件末尾,而不是覆盖原有内容。 - **缓冲策略**:大文件读写时,可以使用缓冲区一次性读写大量数据,减少磁盘I/O次数。 8. *...
- **追加模式**:使用`FileWriter`或`PrintWriter`创建时指定`true`作为构造参数,这样写入的内容会被添加到文件末尾,而不会覆盖原有内容。 - **覆盖模式**:默认情况下,`FileWriter`和`PrintWriter`会覆盖现有...
如果希望在文件末尾追加内容,可以使用`FileWriter`的构造函数中的`append`参数,或者在打开`BufferedWriter`时调用`newLine()`方法。 7. **NIO (非阻塞I/O)** Java NIO (New IO) 是从Java 1.4版本引入的一个新...
使用readLine()方法逐行读取文件内容,直到返回null表示文件末尾。例如: ```java File file = new File("path_to_file"); BufferedReader reader = new BufferedReader(new FileReader(file)); String line; while...
使用循环读取和写出数据,直到文件末尾。这种方法的优点是它可以处理不同类型的文件,只要数据能被读取和写入即可。确保目标文件存在或创建新文件是很重要的步骤。 3. 写文件: - `PrintStreamDemo`方法展示了如何...
在Java中,流(Stream)是一个抽象的概念,它代表了一个数据序列,可以是从硬盘、内存、键盘读取数据,也可以向这些地方写入数据。流的机制使得开发者能够灵活地控制数据的流向。 IO流主要分为两大类:字节流(Byte...
- **追加写入**:通过设置`FileOutputStream`的构造函数中的`append`参数为`true`,可以在文件末尾追加内容。 3. **文件操作**: - **创建文件**:使用`File`类的`createNewFile()`方法创建新文件。 - **删除...
`while`循环遍历文件的每一行,每当达到指定的块大小或者文件末尾时,就创建一个新的输出文件并继续写入。 在实际应用中,可以根据需要调整`chunkSize`参数,以满足特定的需求。例如,如果要将文件分割成固定大小的...
在Java编程语言中,文件操作是一项基础且至关重要的任务,无论是读取数据、保存用户配置还是处理日志,都离不开对文件的操作。本篇将详细讲解如何在Java中进行读写文件。 首先,我们从“java读文件”这个主题开始。...
4. **文件分块读取与写入**:在Java中,使用`java.nio`包的`FileInputStream`和`FileOutputStream`配合`Channels`进行文件的分块读写。通过设置缓冲区大小,可以从特定位置开始读取或写入文件。 5. **记录已下载...
- **追加模式**:通过在创建 `FileOutputStream` 或 `FileWriter` 时设置 `true` 作为构造函数的第二个参数,可以启用追加模式,使得新写入的内容添加到文件末尾而不是覆盖原有内容。 3. **文件操作**: - **删除...
3. 文件追加:使用FileWriter的append()方法可以在文件末尾添加内容。 4. 文件流的关闭:始终确保在完成操作后关闭流,防止资源泄漏。try-with-resources语句可以简化资源管理。 四、NIO(New IO) Java 1.4引入了...