读文件
//@1 创建File对象,关联某路径
File f = new File("/home/liang/桌面/student.txt");
//@2 创建文件流 (字节流)
InputStream ins = new FileInputStream(f);
//@3 继续封装,生成字符流(文本)
//在内部,自动将字节----编码-----》字符
InputStreamReader rd = new InputStreamReader(ins,"utf-8");
//@4 读!
//逐个字符,读取。
int c = rd.read();//Reads a single character.
System.out.println((char)c);
System.out.println((char)rd.read());
System.out.println((char)rd.read());
System.out.println((char)rd.read());
System.out.println((char)rd.read());
System.out.println((char)rd.read());
rd.close();
InputStream in = new FileInputStream(new File("/home/liang/桌面/student.txt"));
InputStreamReader input = new InputStreamReader(in);
char[] ch = new char[100];
int n = 0;
//input.read(ch)将读取的内容写进 ch字符数组中并返回一个整数这个整数表示一次读取字符串的长度
while ((n = input.read(ch)) != -1) {
System.out.print(n);
// new String() 可以将字符数组和字节数组 转化成字符串
System.out.print(new String(ch,0,n));
}
读文件最完美的形式
//@1 创建File对象,关联某路径
File f = new File("/home/liang/桌面/student.txt");
//@2 创建文件流 (字节流)
InputStream ins = new FileInputStream(f);
//@3 继续封装,生成字符流(文本)
//在内部,自动将字节----编码-----》字符
InputStreamReader rd = new InputStreamReader(ins,"utf-8");
//@4 继续封装,得到缓存字符流
//多个字符缓存----》字符串
BufferedReader br = new BufferedReader(rd);
String str = null;
//@4 读!br.readLine()读一整行
while((str =br.readLine())!=null) {
System.out.println(s);
}
//关闭
br.close();
rd.close();
ins.close();
写文件
//@1 创建File对象,关联某路径
File f = new File("C:\\Users\\qx\\Desktop\\bbb.txt");
if(!f.exists()) {
f.createNewFile();
}
//@2 创建文件流 (字节流)
//默认将原内容清除,从头写。
//true 追加模式,避免清空。
OutputStream ins = new FileOutputStream(f,true);
//单个字节写入“我”
//-26,-120,-111
ins.write(-26);//Writes byte to this output stream,int---》byte
ins.write(-120);
ins.write(-111);
//一次写入多个字节
ins.write("我".getBytes("utf-8"));//默认gbk
ins.write('\n');//换行为什么可以直接写成字符的形式?
ins.write("我爱中华".getBytes("utf8"));//默认gbk
//以上出现乱码,在同一个文件中,我们写入了两种编码格式的字节序列;
//统一utf-8
ins.write('a');
ins.write('b');
ins.write('c');
ins.write('d');
ins.close();
System.out.println("/---------------------");
//换行为什么可以直接写成字符的形式?
byte[] ba = "\n".getBytes("utf-8");
System.out.println(Arrays.toString(ba));
byte by = '\n';
System.out.println(by);
// 原因:\n utf-8编码结果就是一个字节,并且与char本身的值一样。
//不单换行符,所有的英文字符、符号,utf-8中都是一个字节,都与char值一致。
//@1 创建File对象,关联某路径
File f = new File("/home/liang/桌面/sss.txt");
//@2 创建文件流 (字节流)
//默认将原内容清除,从头写。
//true 追加模式,避免清空。
OutputStream os = new FileOutputStream(f,true);
//@3 封装字节流,得到字符流
//逐个字符写入
//内部完成 字符 ---编码---》字节序列 转换
OutputStreamWriter wr = new OutputStreamWriter(os);//默认gbk
//@4 写!!
wr.write('我');//Writes a single character.
wr.write(0x7569);//0x7569在unicode码表中,对应的字符
wr.write('\n');
wr.write("我爱河南");
wr.close();
os.close();
写文件最完美形式
//最简洁
PrintWriter p = new PrintWriter("C:\\Users\\qx\\Desktop\\悯农.txt");
p.println("锄禾日当午");
p.println("汗滴禾下土");
p.close();
//PrintWriter 如何设置追加模式呢?
File f = new File("C:\\Users\\qx\\Desktop\\bbb.txt");
OutputStream os = new FileOutputStream(f,true);//借助字节流,才能追加
PrintWriter p1 = new PrintWriter(os);
p1.println("锄禾日当午");
p1.println("汗滴禾下土");
p1.close();
os.close();
//PrintWriter 如何设置编码?
OutputStreamWriter wr = new OutputStreamWriter(os,"utf-8");//借助基础Writer设置编码
PrintWriter p2 = new PrintWriter(wr);
p2.println("锄禾日当午");
p2.println("汗滴禾下土");
p2.close();
os.close();
文件拷贝
FileChannel in = new FileInputStream(new File("/home/liang/音乐/何山 - 何山-满城花开.mp3")).getChannel();
FileChannel out = new FileOutputStream(new File("/home/liang/桌面/sss.mp3")).getChannel();
out.transferFrom(in,0,in.size());
//速度最快