字节流: 读写二进制的对象
字符流: 读写的都是字符 方法:Reader Write
文件: 相关记录数据的集合
**************************************
java.io.file的常用方法:
File(File parent,String child) 文件路径和文件对象
File(File parent) 只创建一个文件路径
File(String parentname)
File(String parent,String child)
public String getPath()
public String getParent()
public String getAbsolutePath()
public boolean exists()
public long length()
public boolean createNewFile() throws IOException
public boolean mkdir() throwsIOException
**************************************
InputStream 输入流它是一个抽象类
read() 从输入流中读取下一个数据字节
read(byte[] b) 读取一定数量的字节并将其存储在缓冲区数组b中
available() 返回输入流方法的下不受阻塞而读取的字节数
skip(long n) 跳过和放弃输入流中的N个数据字节
mark(int readlimit) 在此输入流中标记当前的位置
reset() 将此输入重新定位到对此输入流最后调用mark方法时
close() 关闭输入流并释放所有系统资源
**************************************
OutputStream 输出流
write(int b) 将指定的字节写入输出流
flush() 刷新输出流强制写出所有缓冲的输出字符
close() 关闭输出流并释放所有系统资源
**************************************
FilterInputStream 和 FilterOutputStream
目的:增加原有类的功能使其读(写)得更快而且更有效
用FileInputStream 读文本文件(1)
引入相关的类
import java.io.IOException;
import java.io.InputStream;
import java.io.FileInputStream;
构造一个文件输入流对象
InputStream fileobject = new FileInputStream(“text.txt”);
用FileInputStream 读文本文件(2)
利用文件输入流类的方法读取文本文件的数据
fileobject.available(); //可读取的字节数
fileobject.read(); //读取文件的数据
关闭文件输入流对象
fileobject.close();
public static void main(String[] args) throws IOException {
int size;
InputStream fileobject = new FileInputStream(args[0] );
System.out.println(“可读取的字节数: "
+ (size = fileobject.available()));
char[] text = new char[200] ;
for (int count = 0; count < size; count++) {
text[count] = ((char) fileobject.read());
System.out.print(text[count]);
}
System.out.println("");
fileobject.close();
}
FileOutputStream 文件输出流
引入相关的类
import java.io.IOException;
import java.io.OutputStream;
import java.io.FileOutputStream;
构造一个文件输出流对象
OutputStream fos = new FileOutputStream("Text.txt");
利用文件输出流的方法写文本文件
String str ="好好学习Java";
byte[] words = str.getBytes();
fos.write(words, 0, words.length);
关闭文件输出流
fos.close();
public static void main(String[] args) {
try {
String str ="好好学习Java";
byte[] words = str.getBytes();
OutputStream fos = new FileOutputStream("Text.txt");
fos.write(words, 0, words.length);
System.out.println("Text文件已更新!");
fos.close();
} catch (IOException obj) {
System.out.println("创建文件时出错!");
}
}
过滤一个流
缓冲字节流:
BufferedInputStream
BufferedOutputStream
用BufferedReader 读文本文件 (1)
引入相关的类
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;
构造一个BufferedReader对象
FileReader fr=new FileReader("mytest.txt");
BufferedReader br=new BufferedReader(fr);
br.readLine(); //读取一行数据,返回字符串
关闭相关的流对象
br.close();
fr.close();
例:
/**创建一个FileReader对象.*/
FileReader fr=new FileReader("mytest.txt");
BufferedReader br=new BufferedReader(fr);
String line=br.readLine();
System.out.println(line);
line=br.readLine();
}
br.close();
fr.close();
用BufferedWriter 写文本文件
引入相关的类
import java.io.FileWriter ;
import java.io.BufferedWriter ;
import java.io.IOException;
构造一个BufferedWriter对象
FileWriter fw=new FileWriter("mytest.txt");
BufferedWriter bw=new BufferedWriter(fw);
利用BufferedWriter的方法写文本文件
bw.write (“hello”);
相关流对象的清空和关闭
bw.flush();
fw.close();
例:
/**创建一个FileWriter 对象*/
FileWriter fw=new FileWriter("mytest.txt");
/**创建一个BufferedWriter 对象*/
BufferedWriter bw=new BufferedWriter(fw);
bw.write("大家好!");
bw.write("我正在学习BufferedWriter。");
bw.newLine();
bw.write("请多多指教!");
bw.newLine();
bw.write(“好好学习VCDP");
bw.flush();
fw.close();
//////////////////////////////////////////////////////
字符流类
Reader和Writer
FileReader和FileWriter
BufferedReader和BufferedWriter
//////////////////////////////////////////////////////
习题:在D盘里创建一个AAA文件夹,在文件夹里在建一个T1文件夹,在T1建一个a.txt文件
Import java.io.*
class A
{
public static void main(String args[]) throws IOException
{
File f=new File("D:\\AAA\\t1");
if(!f.exists()){//判断有无此文件夹,在就复盖,无创建
f.mkdirs();//一次性可创建多个文件夹,若只创建一个文件夹
}
File nextFile=new File(f,"a.txt");//在文件夹里创建一个a.txt文
nextf.createNewFile(); //createNewFile()是创建文件的
读文件
File a=new File("D:\\AAA\\t1\\a.txt");
inputStream in=new FileInputStream(a);
in.read();//一个字节一个字节读反回ASCII码
StringBuffer s=new StringBuffer
for(int i=0;i<=n;i++)
{
char(in.read());//将int转成Char型或String+空格
s.append(char(in.read));//返回所有字符内容
}
System.out.println(s);//将所有字符内容打印
若有中文的将上读文件替换
int n=in.available();
byte b[]=new byte[];
in.read[a];//一次性读入
String s=new String (b);
System.out.println(s);
//////////////////
File file =new File("D:\\AAA\\t1\\a.txt");
OutputStream out=new FileOutputStream(file);
Strint s="Hello";
out.write(s.getBytes());
out.close();//关闭流
}
}
///////////////////////////////////////////////////////////////////
1> 构建如下目录
d:\hello\t1\a.txt
d:\hello\t1\b.txt
d:\hello\t1\c.txt
import java.io.*;
class A
{
public static void main(String[] args) throws IOException
{
File f=new File("D:\\hello\\t1");
if(!f.exists())
{
f.mkdirs();
}
File f1=new File(f,"a.txt");
f1.createNewFile();
File f2=new File(f,"b.txt");
f2.createNewFile();
File f3=new File(f,"c.txt");
f3.createNewFile();
}
}
a.txt
hello World
MyWorld
b.txt
XXX学校
XX中心
c.txt
学号:XX
名字:XX
import java.io.*;
class B
{
public static void main(String[] args) throws IOException
{
File f=new File("D:\\hello\\t1\\a.txt");
OutputStream out=new FileOutputStream(f);
String str="hello World\r\nMyWorld";
out.write(str.getBytes());
out.close();
OutputStream out1=new FileOutputStream(f1);
String str1="XXX学校\r\nXX中心";
out1.write(str1.getBytes());
out1.close();
File f2=new File("D:\\hello\\t1\\c.txt");
OutputStream out2=new FileOutputStream(f2);
String str2="学号:XXX\r\n名字:XXX";
out2.write(str2.getBytes());
out2.close();
}
}
import java.io.*;
public class C {
public static void main(String[] args) throws IOException{
File ff =new File("d:\\c盘内容.txt");
ff.createNewFile();
File file =new File("c:\\");
String ary[]=file.list();
String a="";
for(String b: ary){
a=a+b+"\r\n";
}
OutputStream out = new FileOutputStream(ff);
out.write(a.getBytes());
out.close();
}
}
??????????????????????????????/流的复习
java.io
类 PrintStream
java.lang.Object
java.io.OutputStream
java.io.FilterOutputStream
java.io.PrintStream
创建具有指定文件且不带自动行刷新的新打印流。
PrintStream(File file, String csn)
创建具有指定文件名称和字符集且不带自动行刷新的新打印流。
创建新的打印流。
创建新的打印流。
PrintStream(OutputStream out, boolean autoFlush, String encoding)
创建新的打印流。
PrintStream(String fileName)
创建具有指定文件名称且不带自动行刷新的新打印流。
PrintStream(String fileName, String csn)
创建具有指定文件名称和字符集且不带自动行刷新的新打印流。
System.in - 标准输入流 键盘 InputStream
打印对象。
void print(String s)
打印字符串。
PrintStream printf(Locale l, String format, Object... args)
使用指定格式字符串和参数将格式化的字符串写入此输出流的便捷方法。
PrintStream printf(String format, Object... args)
使用指定格式字符串和参数将格式化的字符串写入此输出流的便捷方法。
打印整数,然后终止该行。
void println(long x)
打印 long,然后终止该行。
字节流--8 位 字节的方式读写 - 适用于一切情况
InputStream OutputStream
Java - char -> 16位
字符流--16 位 Unicode 主要用于读写字符串
Reader Writer
public abstract class InputStream
read() 读字节
available() 查询可用字节数
close() 关闭流
//InputStream的自类必须实现的方法
abstract 方法
skip() 空方法
mark() 空方法
reset() 空方法
FileInputStream 没有实现过 skip()mark()reset()
public abstract class OutputStream
close() abstract 方法
flush() 空方法
BufferedOutputStream 实现过flush()
///////////////////////////////////////////////////
1> Java中流分字节流和字符流 java.io.*
InputStream OutputStream
字符流--16 位 Unicode
Reader Writer
输出流 - 从 程序 到 目的地 目的地- XXXOutputStream
过虑流 - 用于加强已有输入输出流的功能
输入型
输出信
new BufferedInputStream(new FileInputStream("文件