码迷,mamicode.com
首页 > 编程语言 > 详细

Java基础 笔记(六)

时间:2015-08-21 15:50:00      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:java   io   

IO:
按流向:
输入流:程序可以从中读取数据的流
输出流:程序能向其中写入数据的流
按传输单位:
字节流:以字节为单位传输数据的流
字符流:以字符为单位传输数据的流
按功能:
节点流:用于直接操作目标设备的流
处理流:是对一个已经存在的流的连接和封装,通过对数据提供处理为程序提供更为强大、灵活的读写功能
IO(Input Output)输入输出
读写文件操作:
1 创建File类对象,定位文件。
2 创建流
3 读、写
4 关闭流

字符流:
Writer:
FileWriter(String fileName)
FileWriter(String fileName,boolean append)

    void write(int c):一个字符一个字符的写入
    void write(char[] c)
    void write(char[] c,int off,int len)
    close()
    flush()

Reader:
FileReader(String fileName) throws FileNotFoundException
int read() :返回值 读取的内容
int read(char[] c) :返回值 读取的长度
int read(char[] c,int off,int len) 返回值 读取的长度
read():当读到文件末尾,返回值-1
close()
缓冲流:处理流
专门为了提高读写效率,必须结合读取流来完成读写操作
先将数据读取到缓冲区,然后从缓冲区读取数据,效率高。
适用于文件较大的情况
BufferedReader 字符缓冲区读取流
BufferedWriter 字符缓冲区写入流

—>装饰者模式:基于已经存在的功能提供增强功能
将扩展的类作为新的类的构造函数参数传入,然后对这个类进行装饰处理。
为了让装饰者有被装饰者的功能,需要存在继承关系


字符流:FileWriter
向文本文件中写入数据
1)使用Writer流
2)使用文件字符流 FileWriter
构造方法:throws IOException
FileWriter(File file)
FileWriter(File file,boolean append)
FileWriter(String filename)
FileWriter(String fileName,boolean append)
方法:
void write(int c) :写入单个字符
void write(char[] c) :写入字符数组
void write(char[] c,intoff,int len): 写入字符数组的一部分
void write(String str) :写入字符串
void write(String str,int off,intlen) :写入字符串的一部分
void flush() :刷新该流的缓冲
void close() :关闭流,关之前会自动刷新

// 创建文件输出流对象FileWriter
// 如果文件不存在,会自动创建,如果存在会被覆盖
FileWriter fw = new FileWriter(“src/temp.txt”);
// 向文件中写入数据,写入到缓冲区中,这个缓冲区是一个字节数组
fw.write(“hello world!!”);
// 刷新缓冲区
fw.flush();
fw.write(“aa”);
fw.close(); // 自动刷新缓冲区后,关闭流.关闭流之后就不可以写入了,否则会抛出异常
System.out.println(“写入成功”);
System.out.println(“—————”);
// 写入的新的内容会在原来内容后面追加
FileWriter fw1 = new FileWriter(“src/temp.txt”, true);
fw1.write(“你好!!”);
fw1.flush();
fw1.close();


Reader类:FileReader
构造方法: throws FileNotFoundException
FileReader(File file)
FileReader(String fileName)
方法:throws IOException
int read():每次读取一个字符,末尾-1
返回值就是读入的内容
int read(char[] c):每次读取一组字符,最多读数组长度个,末尾-1
返回值实际读取的个数
int read(char[] c,int off,int len):每次读取一组字符,最多len个, 数据存入数组从off开始,末尾-1
返回值实际读取的个数
void close()

int num = 0;
while ((num = fr.read()) != -1) {// 每次读取一个字符,末尾返回值为-1
System.out.println((char) num);
}
fr.close();


BufferedWriter
处理流(不直接操作文件)
目的:缓存数据,提高写入的速度。类似内存
BufferedWriter(Writer writer)
newLine()—>void 写入一个新行
// 因为缓冲区流不具备写入的功能,所以先创建文件写入流
FileWriter fw = new FileWriter(“src/temp.txt”);
// 为了提高效率,使用缓冲区流。把需要被提高写入效率的流作为参数传递给缓冲区写入流的构造方法
BufferedWriter bw = new BufferedWriter(fw);
for (int i = 1; i <= 10; i++) {
bw.write(“你好” + i);
bw.newLine(); // 跨平台
bw.flush();
}
bw.close(); // 关闭缓冲区流就是关闭写入流


BufferedReader:BufferedReader(Reader reader)
String readLine():每次读取一行数据,但是返回的内容不包括换行,如果末尾,null
// 使用缓冲区读取流文件读取
// 创建文件读取流和文件相关联的缓冲区读取流
FileReader fr = new FileReader(“src/temp.txt”);
// 为了提高效率,使用缓冲区读取流
BufferedReader br = new BufferedReader(fr);
// 提供了一个一次读取一行的功能String readLine()
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
System.out.println(br.readLine());// null
br.close(); // 自动关闭FileReader对象


字节流:
InputStream类
FileInputStream
OutputStream类
FileOutputStream
// 返回文件的大小,单位字节 int num = fis.available(); System.out.println(“文件大小:”+ num + “bytes”);
byte[] arr = new byte[num]; // 定义了一个和文件大小相同的字节数组 int len =fis.read(arr);// 不适用文件过大的情况 System.out.println(new String(arr, 0,len));
// 一个字节一个字节读取:中文会出现乱码,每次读取的是一半汉字
int num = 0;
while ((num =fis.read()) != -1) {
System.out.println((char) num);
}

// 读取后放入数组中 byte[] b = new byte[1000]; int len = 0;
while ((len =fis.read(b)) != -1) {
System.out.println(new String(b, 0, len));
}
fis.close();


// 标准输入流
InputStream is = System.in;
// 标准输入字节流转化成字符流
InputStreamReader isr = new InputStreamReader(is);
// 使用缓冲区流提高效率
BufferedReader br = new BufferedReader(isr);
// 标准输出流:打印流
PrintStream out = System.out;
// 创建输出流对象
OutputStreamWriter osw = new OutputStreamWriter(out);
// 创建缓冲区输出流
BufferedWriter bw = new BufferedWriter(osw);
String line = null;
while ((line = br.readLine()) != null) {
if (line.equals(“88”)) {
bw.write(“谢谢使用”);
break;
}
bw.write(line);
bw.newLine();
bw.flush();
}
br.close();
bw.close();


File:

基本方法:
File f05 = new File(“src/Demo1.java”);
System.out.println(“文件名称为:” + f05.getName());
System.out.println(“文件的路径为:” + f05.getPath());
System.out.println(“父路径为:” + f05.getParent());
System.out.println(“绝对路径:” + f05.getAbsolutePath());
System.out.println(“文件的长度为:” + f05.length() + “B”);

    System.out.println("Demo1.java是否是一个文件?" + f05.isFile());
    System.out.println("Demo1.java是否是一个目录?" + f05.isDirectory());

    System.out.println(new File("e:/abc").delete());
    System.out.println(new File("e:/abc/123/456/789").delete());

FileFilter:文件过滤器
// 显示所有的txt
static void listTxt(File file) {
File[] files = file.listFiles(new FileFilter() {

        @Override
        public boolean accept(File pathname) {
            String name = pathname.getName();
            if (name.endsWith("txt")) {
                return true;
            }
            return false;
        }
    });
    for (File f : files) {
        System.out.println(f.getName());
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java基础 笔记(六)

标签:java   io   

原文地址:http://blog.csdn.net/u011102153/article/details/47833361

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!