java IO 一 (读写字符串)
2016-04-21 16:27
806 查看
首先扯点别的:真是好记性不如烂笔头啊,关于java的输入输出流真是看一遍忘一遍,每次用的时候还得查看API,也是艰难。除了知道IO可以分为输入流,输出流,字符流,字节流,其他的忘得干干净净的,都还给老师了。所以再看一遍,再把这些基础知识好好整理学习一下。参考:毕向东老师的java视频
今天写的内容
如何创建一个文件并写入字符串。
从一个文件总读取字符串。
在Eclipse中新建一个JavaIo的工程,在工程目录下新建一个read_writer包
新建一个FileWriterDemo.java 用来创建一个文件并写入字符串
运行后,在工程名上右击,点击refresh,就会发现在工程的根目录下出现一个FileWriterDemo.txt,双击打开,就会发现字符串已经被写入。
重点看看上面的几行代码
FileWriter的构造函数们,都出来吧,别藏着掖着了。
选用的时候根据自己的实际需求选择构造函数。
write还有几个比较常用的重载方法
下面我来演示一下使用void write(String str, int off, int len) 可能出现的错误。其他代码都没变,就变了一行代码。
看看出现的错误的。
字符串越界。出现这种异常的原因是没有理解void write(String str, int off, int len) 方法的参数的含义。
String str=”helloworld”;长度为10,我从下标为5的位置(w)为起点开始写,然而这时候从起点到字符串末尾(d)的字符的个数是5,而我的第三个参数指定为10.所以肯定越界了,我改成5运行一下,就没错了。这是我遇到过的错误,希望大家注意。
另外,如果你想写入字符串之前换一行,怎么办,可以这样写
但是当你写完用记事本打开这个FileWriterDemo.txt文件时,发现没有换行。这是不要怀疑。这是记事本的错。它不能识别”\n”,所以建议你用notePad++,或EditPlus等软件打开。
写数据的时候要记得调用flush()。意思是让写出的内容立即出现在文件中。
写完数据后,注意在finally块中关闭数据流。
FileReader的构造函数
看一看重点代码
看看这行代码: (count=fr.read(buf))!=-1)。意思就是如果没到文件的末尾
下面的例子展示如何把D盘中的一个文本文件OriginalFile.java复制一份到D盘下命名为Destination.java。
行,差不多到结尾了。休息一下。有错误和疑问欢迎指出,感激不尽。
下一篇文章链接
java IO 二(字符流缓冲区)
今天写的内容
如何创建一个文件并写入字符串。
从一个文件总读取字符串。
在Eclipse中新建一个JavaIo的工程,在工程目录下新建一个read_writer包
新建一个FileWriterDemo.java 用来创建一个文件并写入字符串
package read_writer; import java.io.FileWriter; import java.io.IOException; public class FileWriterDemo { public static void main(String[] args) { writeString(); } /** * 向文件中写入一个字符串 */ private static void writeString() { FileWriter fw=null; try { //在工程的根目录下创建一个FileWriter对象,如果该目录下已有同名文件,旧的文件将被覆盖 fw=new FileWriter("FileWriterDemo.txt",true); //要被写入的字符串 String str="helloworld"; fw.write(str); //将数据刷新到目的文件中 fw.flush(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(fw!=null){ //关闭数据流 fw.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
运行后,在工程名上右击,点击refresh,就会发现在工程的根目录下出现一个FileWriterDemo.txt,双击打开,就会发现字符串已经被写入。
重点看看上面的几行代码
//创建一个FileWriter对象,如果该目录下已有同名文件,旧的文件将被覆盖 fw=new FileWriter("FileWriterDemo.txt",true);
FileWriter的构造函数们,都出来吧,别藏着掖着了。
//通过给定的file创建一个FileWriter对象 FileWriter(File file) //通过给定的file创建一个FileWriter对象,第二个参数取值为false:标识向文件中写入覆盖旧的内容.取值为true:接着文件中的内容继续在后面写。 FileWriter(File file, boolean append) Constructs a FileWriter object given a File object. //通过给定的文件描述符创建一个FlieWriter对象。我就略了。 FileWriter(FileDescriptor fd) //通过字符串文件名创建一个FileWriter FileWriter(String fileName) Constructs a FileWriter object given a file name. //通过字符串文件名创建一个FileWriter,第二个参数取值为false:标识向文件中写入覆盖旧的内容.取值为true:接着文件中的内容继续在后面写。 FileWriter(String fileName, boolean append)
选用的时候根据自己的实际需求选择构造函数。
//将字符串写入文件。 fw.write(str);
write还有几个比较常用的重载方法
// 把字符数组写入文件 void write(char[] cbuf) //把字符数组的一部分写入文件。off表示从数组cbuf的什么位置开始写,len表示写入的字符数 void write(char[] cbuf, int off, int len) // 把字符串写入文件,就是代码中用到的。 write(String str); //写单个字符 write(int c); //把字符串的一部分写入文件。off表示从字符串str的什么位置开始写,len表示写入的字符数 void write(String str, int off, int len)
下面我来演示一下使用void write(String str, int off, int len) 可能出现的错误。其他代码都没变,就变了一行代码。
String str="helloworld"; //就变了这行代码。 fw.write(str,5,10);
看看出现的错误的。
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 15
字符串越界。出现这种异常的原因是没有理解void write(String str, int off, int len) 方法的参数的含义。
String str=”helloworld”;长度为10,我从下标为5的位置(w)为起点开始写,然而这时候从起点到字符串末尾(d)的字符的个数是5,而我的第三个参数指定为10.所以肯定越界了,我改成5运行一下,就没错了。这是我遇到过的错误,希望大家注意。
另外,如果你想写入字符串之前换一行,怎么办,可以这样写
String str="\nhelloworld"; fw.write(str);
但是当你写完用记事本打开这个FileWriterDemo.txt文件时,发现没有换行。这是不要怀疑。这是记事本的错。它不能识别”\n”,所以建议你用notePad++,或EditPlus等软件打开。
//将数据刷新到目的文件中 fw.flush();
写数据的时候要记得调用flush()。意思是让写出的内容立即出现在文件中。
写完数据后,注意在finally块中关闭数据流。
if(fw!=null){ //关闭数据流 fw.close(); }
读入一个字符串
使用FileReader从我们刚才创建的文件中读取字符串。就很简单了。FileReadDemo.javapackage read_writer; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class FileReadDemo { public static void main(String[] args) { FileReader fr=null; try { fr=new FileReader("FileWriterDemo.txt"); int count=0; char buf[]=new char[1024]; while((count=fr.read(buf))!=-1){ System.out.print(new String(buf,0,count)); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if(fr!=null){ try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
FileReader的构造函数
//通过指定的文件创建一个FileReader。 FileReader(File file) //通过一个文件描述符创建一个FileReader FileReader(FileDescriptor fd) //通过一个字符串形式的文件名创建一个FileReader FileReader(String fileName) Creates a new FileReader, given the name of the file to read from.
看一看重点代码
int count=0; char buf[]=new char[1024]; //循环读取文件中的内容直到文件末尾。 while((count=fr.read(buf))!=-1){ //把char数组转化为字符串输出。 System.out.print(new String(buf,0,count)); }
看看这行代码: (count=fr.read(buf))!=-1)。意思就是如果没到文件的末尾
//这个方法把文件中的内容读取到buf数组中,如果到了文件的末尾会返回-1.否则就返回读到的字符的个数。read的其他的重载方法也是类似的。 int read(char[] cbuf)
下面的例子展示如何把D盘中的一个文本文件OriginalFile.java复制一份到D盘下命名为Destination.java。
package read_writer; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; public class CopyFileTest { public static void main(String[] args) { copy(); } private static void copy() { FileWriter fw = null; FileReader fr = null; try { fr = new FileReader("D:/OriginalFile.java"); fw = new FileWriter("D:/Destination.java"); char[] buf = new char[1024]; int len = 0; while ((len = fr.read(buf)) != -1) { fw.write(buf, 0, len); fw.flush(); } } catch (IOException e) { e.printStackTrace(); } finally { if (fw != null) { try { fw.close(); } catch (IOException e) { e.printStackTrace(); } } if (fr != null) { try { fr.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
行,差不多到结尾了。休息一下。有错误和疑问欢迎指出,感激不尽。
下一篇文章链接
java IO 二(字符流缓冲区)
相关文章推荐
- JAVA守护线程
- spring整合消息队列rabbitmq
- JavaMail类
- Java类代码块执行顺序
- java要注意的问题1
- Java反射机制Class类的用法详解
- SpringMvc、Maven整合FreeMarker--访问不到js、css
- JAVA中Action层, Service层 ,modle层 和 Dao层的功能区分
- 启动报错: org.springframework.web.context.ContextLoaderListener
- Spring容器启动后注入service到Servlet并自动执行
- Java 泛型的限定
- 关于javax包找不到
- [改善Java代码]慎用动态编译
- [spring源码学习]五-BeanPostProcessor的使用
- java反射详解
- Spring学习——Aop原理
- java多线程编程的volatile应用
- JDK之jstat的用法
- eclipse svn插件卸载 重新安装 Subclipse卸载安装 The project was not built since its build path is incomplete This client is too old to work with the working copy at
- Mybatis之XML配置文件解析