package com.LQBZ.JDK.io;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
/**
* 本程序能完成以下内容:
* 1.一次建立目录,子目录,文件.(mkdirs&createNewFile)
* 2.在文件中添加(覆盖,追加)可读内容.
* @author 张友谅
*
*/
public class ClassOutputStreamTest {
private static FileOutputStream fileOut;
private static FileOutputStream fileOut1;
public static void main(String[] args) throws IOException {
File file = new File("G:\\Users\\Administrator\\workspace\\test\\src\\com\\hello.java");
File file1= new File("D:\\123\\123\\123\\");
// //对文件的操作关键是看FileOutputStream构造函数,第二个参数表示是否追加,默认false
// fileOut = new FileOutputStream(file1,true);
// //这样写就表示覆盖文件,比较危险.
// fileOut1 = new FileOutputStream(file);
// //文件写入是以ASCII码方式(byte字节)进行的,40对应的符号是"("
// fileOut.write(40);
// //递归建立目录和文件,判断条件是父目录是否存在,注意就算带上后缀,建立的也是文件夹
// if(!(file1.getParentFile().exists())){
// file1.mkdirs();
// }
// //下面两行配合上面三行才是建立文件的完整过程
File file2 = new File(file1, "123.txt");
// file2.createNewFile();
// //上面说到文件写入是以比特数组进行的,如果要写入一串字符串要怎么写呢?
// String str = new String("悲鸣非身死,长戈断炊烟");
// fileOut1 = new FileOutputStream(file2,false);
// fileOut1.write(str.getBytes());
//如果想只将部分内容读到文件中,则可以这么用:
String str = new String("悲鸣非身死,长戈断炊烟\n");
fileOut1 = new FileOutputStream(file2,false);
for(int i = 0 ; i<5 ; i++)
fileOut1.write(str.getBytes());
//输入输出流应该及时关闭,释放资源,养成良好的编码习惯.
fileOut1.close();
}
}
package com.LQBZ.JDK.io;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* 本程序能完成以下内容:
* 正确地读取文件中的内容
* @author 张友谅
*/
public class ClassInputStreamTest {
private static int ch;
private static byte []cup = new byte[1024];
//InputStream 输入流类,它上面直接继承自java.lang.Object类
//而它的子类有9个之多,可见其重要性.
//IntpuStream 类是一个抽象类,所以以下的例子都配合它的子类使用
public static void main(String[] args) throws IOException {
//已存在的文件:
File file = new File("D:123\\123\\123\\123.txt");
//实例化文件输入流
InputStream inputStream = new FileInputStream(file);
// //这里的编码格式是保证读取中文不乱码的关键
// //PS:要跟目标文件的编码格式一样.
// Reader reader = new InputStreamReader(inputStream,"GB2312");
// //缓冲器:提高读取效率
// BufferedReader bf = new BufferedReader(reader);
// //如果在while中不写ch,输出的时候需要再一次调用bf.read()
// //而这样输出的结果是每隔一个字符输出一个字符,这样显然是不对的
// //因为每次调用bf.read()都会在输入流中读取一个字符
// //当判断条件为-1时代表文件已经读完,程序结束
//这是用循环实现内容输出的方式
// while((ch = bf.read())!=-1){
// System.out.print((char)ch);
// }
//
// //这是不用显式循环输出内容的方式.
// //注意注意!!在文字的后面有一行很长的空格!
// //原因是所有字符加起来也不够1024,所以用空格补全
// //就好像用水杯装水,不管你装的多少,水杯就在那,你装太多,也只会溢出.
// inputStream.read(cup);
// System.out.println(new String(cup));
// //所以可以这么写,利用read的返回值取得有效内容长度
int len = inputStream.read(cup, 0, cup.length);
System.out.println(new String(cup,0,len)+"]");
//输入输出流应该及时关闭,释放资源,养成良好的编码习惯.
inputStream.close();
// reader.close();
// bf.close();
}
}
/*
* 总结:
* 如果说File类是与文件打交道的第一步,即找到了文件
* 那么下一步很自然的就是对其进行更改
* 而文件的输入输出流无疑是实现这一步的重要手段
*
* 输出(方法是write)就是从键盘到内存再到文件,
* 输入(方法是read)就是从文件到内存再到屏幕.
*
* 输入输出其实是以内存和文件的关系来说的,内存做主体,从内存输出,向内存输入.
* 内存写到文件,文件读入内存
*
* 主体是内存! 主体是内存! 主体是内存!
* 重要的事缩三遍!
*
* 怎么好记怎么记
* */