A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于清云 中级黑马   /  2012-4-26 09:20  /  1985 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

问题就是“文件的输入与输出”。首先我不明白为什么要读取文件以及读取文件的作用是什么,其次我也不清楚如何自己确定输出文件中的内容。自己写的下面的这段代码只能够输出一个0KB的指定文件名文件……
Java code:

import java.io.*;
import java.util.*;
public class FileOpt
{
public static void main(String[] args) throws FileNotFoundException
{
PrintWriter out = new PrintWriter("test.txt");
String ChineseDate = String.format("%1$s%5$tY%2$s%5$tm%3$s%5$td%4$s %5$tA","今天是","年","月","日", new Date());
String ChineseTime = String.format("%1$s%2$tT","现在时刻 北京时间", new Date());
out.println(ChineseDate);
out.println(ChineseTime);
out.println("abc");
}
}

上面这段代码(不要说我闲大了没事用一大串printf来试验,只是因为我之前写了几个printf的,而且都已成功编译运行 - -)会输出一个空白的test.txt,我想问的是,PrintWriter这个命令到底是干什么用的?最下面那几行out...那些用得对吗?

5 个回复

倒序浏览
Java I/O流分为两类,字节流和字符流。字节流是指InputStream/OutputStream及其子类,字符流是指Reader/Writer及其子类。这两类I/O流的class hierarchy基本上是对等的,InputStreamReader/OutputStreamWriter是InputStream/OutputStream和Reader/Writer之间的桥梁。

   PrintStream是OutputStream的子类,PrintWriter是Writer的子类,两者处于对等的位置上,所以它们的API是非常相似的。PrintWriter实现了PritnStream的所有print方法。对于PrintStream,所有println方法都在内部调用相应的print方法,比如println(char x)的方法体就是调用print(x);再写入一个平台相关的换行符。PrintStream构建时会在内部new一个BufferedWriter,所有print方法都在内部调用这个Writer的write方法(write(String)或write(char[]))——对于print(char[]),直接调用write(char[]);对于其他的print方法,先用String.valueOf获得参数的字符串表示,然后调用write(String)。
   对于PrintWriter,所有println方法也都在内部调用print方法,print方法调用write方法。传入OutputStream时,PrintWriter会在内部构造一个BufferedWriter;而传入Writer时,PrintStream内部直接使用该Writer,此时PrintWriter是否进行了缓冲全看该Writer。
所以,对于使用print系列方法的场合,二者没什么区别。
但是,PrintStream是字节流,它有处理raw byte的方法,write(int)和write(byte[],int,int);PrintWriter是字符流,它没有处理raw byte的方法。PrintStream和PrintWriter的auto flushing机制有点不同,前者在输出byte数组、调用println方法、输出换行符或者byte值10(即\n)时自动调用flush方法,后者仅在调用println方法时发生auto flushing。
System.out是PrintStream。其实这些东西我都是从API文档中找到的。



评分

参与人数 1黑马币 +10 收起 理由
职业规划-刘倩老师 + 10 赞一个!

查看全部评分

回复 使用道具 举报
刘永菲 发表于 2012-4-26 09:27
Java I/O流分为两类,字节流和字符流。字节流是指InputStream/OutputStream及其子类,字符流是指Reader/Wri ...

这么多 啊 挺好 我仔细看看啊
回复 使用道具 举报
PrintWriter是 打印流 是 向文件输出 的首选的类 ,不用关注他输入的是不是中文 ,这个类已经给我们处理好了 ,不会出现中文乱码

看下面的例子
import java.io.FileNotFoundException;
import java.io.PrintWriter;

public class Tp {

public Tp() {
  PrintWriter writer;
  try {
   writer = new PrintWriter("E://a.txt");
   String userInput = "中sss";
   writer.write(userInput + "\r\n");
   writer.flush();   
} catch (FileNotFoundException e) {

   e.printStackTrace();
  }

}
public static void main(String[] args){
  new Tp();
}
}
writer.write(userInput + "\r\n");

回复 使用道具 举报
问题就是“文件的输入与输出”。首先我不明白为什么要读取文件以及读取文件的作用是什么,其次我也不清楚如何自己确定输出文件中的内容。自己写的下面的这段代码只能够输出一个0KB的指定文件名文件……

你是说没写入吗?这代码没关流,所以没写入,;printWriter流中,有2个写入方法,writer,print;区别前者写入的查码表转换,后者直接写入字符;
回复 使用道具 举报
存取文件是对数据的操作,这在程序中是很重要的。
为什么输出的文件时0kb?  因为,其一,你没有flush,其二,你没有关闭流,其三,你没有使用PrintWriter(Writer w,boolean autoflush) 这个构造函数,并把autoflush设为真
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马