自己整理的笔记,以后留着看。
1.创建文件
/**
* 创建文件
* 注意:创建文件之前判断文件是否存在,不然原来的文件要被覆盖。
*/
public static void createFileDemo(){
File file = new File(filepath);
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. File类中的常量
File.pathSeparator指的是分隔连续多个路径字符串的分隔符,例如:
java -cp test.jar;abc.jar HelloWorld
就是指“;”
File.separator才是用来分隔同一个路径字符串中的目录的,例如:
C:\Program Files\Common Files
就是指“\”
/**
* 用字节流的方式写入文件
* 文件输出流的创建方式有两种,File对象或者文件绝对路径。
*/
public static void writeFileByStreamDemo(){
try {
FileOutputStream out = new FileOutputStream(filepath);
//另一种方式
//FileOutputStream out = new FileOutputStream(new File(filepath));
String str="你好";
out.write(str.getBytes());
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
字节流貌似是没有缓冲的,在不调用out.close();的情况下,依然可以向文件中写入数据。字符流有缓冲。
4.FileOutputStream追加文件
/**
* 用FileOutputStream追加文件
* 创建文件输出流时指定第二个参数为true则为追加。new FileOutputStream(filepath,true);
*/
public static void appendFileByStreamDemo(){
try {
FileOutputStream out = new FileOutputStream(filepath,true);
String str="娅娅";
out.write(str.getBytes());
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
5.按流读取文件
/**
* 按流读取,当文件内容较少时,可以将其一次读取到字符数组里面
*/
public static void readFileByStreamDemo1(){
try {
File file = new File(filepath);
FileInputStream in = new FileInputStream(file);
byte[] b = new byte[(int) file.length()];
in.read(b);
System.out.println(new String(b));
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
byte[] b = new byte[(int) file.length()]; 定义和文件内容字节长度一样的字节数组,可以一次写入到数组,如果定义数组长度较长,会导致最后多输出空格。
6.按流循环读取,判断是否到达文件末尾
/**
* 按流循环读取,判断是否到达文件末尾
*/
public static void readFileByStream2(){
try {
File file = new File(filepath);
FileInputStream in = new FileInputStream(file);
byte[] b = new byte[1024];
int len = 0;
while((len = in.read(b))!=-1){
System.out.println(new String(b,0,len));
}
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
FileInputStream
判断是否读取到文件末尾的条件
(len = in.read(b))!=-1
7.字符输出流写入文件
/** * 字符输出流写入文件 */ public static void writeFileByChar(){ try { FileWriter fw = new FileWriter(filepath); fw.write(new char[]{'中','国'}); fw.write(1); fw.write("成功"); fw.close(); } catch (IOException e) { e.printStackTrace(); } }
fw.write(-1); 这里我如果写入-1似乎不能成功,求解?
8.字符输入流读取文件 FileReader
/** * 按字符一次性读取 */ public static void readFileByCharDemo1(){ try { FileReader fr = new FileReader(filepath); char[] c = new char[100]; int len = fr.read(c); System.out.println("length:"+len); System.out.println(new String(c,0,len)); fr.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
9. FileReader循环读取,判断读取到文件末尾
/** * 循环读取,判断读取到文件末尾 */ public static void readFileByChar2(){ try { FileReader fr = new FileReader(filepath); char[] c = new char[1024]; int len=0; while((len= fr.read(c))!=-1){ System.out.println(new String(c,0,len)); } fr.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
10.复制文件
/** * 复制文件 * @param path1 * @param path2 */ public static void copyFile(String path1,String path2){ try { FileInputStream in = new FileInputStream(path1); FileOutputStream out = new FileOutputStream(path2); byte[] b = new byte[1024]; int len = 0; while((len=in.read(b))!=-1){ out.write(b, 0, len); } in.close(); out.close(); } catch (IOException e) { } }
11. OutputStreramWriter 和 InputStreamReader
OutputStreramWriter 和InputStreamReader类 整个IO类中除了字节流和字符流还包括字节和字符转换流。 OutputStreramWriter将输出的字符流转化为字节流 InputStreamReader将输入的字节流转换为字符流
public static void OutputStreramWriterDemo1(){ try { Writer writer = new OutputStreamWriter(new FileOutputStream(copypath)); writer.write("hello"); writer.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
public static void InputStreamReaderDemo1(){ try { Reader reader = new java.io.InputStreamReader(new FileInputStream(filepath)); char[] c = new char[100]; int len = 0; len = reader.read(c); System.out.println(new String(c,0,len)); reader.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
12.打印流 PrintStream
public static void printStreamDemo1(){ try { PrintStream print = new PrintStream(new FileOutputStream(filepath)); print.print(true); print.print("yaya"); String name="Rollen"; Integer age = 20; // 格式化输出 print.printf("姓名:%s. 年龄:%d.", new Object[]{name,age}); print.close(); print.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } }
13. PrintStream输入输出重定向
// 输入输出重定向 public static void PrintStreamDemo2(){ // 此刻直接输出到控制台 System.out.println("hello"); File file = new File(filepath); try{ System.setOut(new PrintStream(new FileOutputStream(file))); }catch(FileNotFoundException e){ e.printStackTrace(); } System.out.println("这些内容在文件中才能看到哦!"); }
// 使用OutputStream向控制台输出内容 public static void OutputStreamDemo(){ try { OutputStream out = System.out; out.write("输出到控制台".getBytes()); out.close(); } catch (Exception e) { } }
14 BufferedReader
// bufferedReader 只接受字符输入流。 public static void BufferedReader1(){ // System.in 流转换成 字符输入流 InputStreamReader BufferedReader br = new BufferedReader( new InputStreamReader(System.in) ); System.out.println("请输入内容:"); try { String str = br.readLine(); System.out.println("你输入的内容是:"+str); } catch (IOException e) { e.printStackTrace(); } }
15 Scanner
// 采用Scanner类来进行数据输入, public static void ScannerDemo(){ Scanner scanner = new Scanner(System.in); System.out.println("请输入内容:"); String str = scanner.nextLine(); System.out.println("你输入的内容是:"+str); }
// Scanner 从文件中读取内容 // Scanner可以接受任何的输入流 public static void Scanner2(){ File file = new File(filepath); try { Scanner scanner = new Scanner(file); String str = scanner.next(); System.out.println("文件中的内容为:"+str); } catch (FileNotFoundException e) { e.printStackTrace(); } }
16 数据操作流DataOutputStream、DataInputStream类
//数据操作流DataOutputStream、DataInputStream类 public static void DataOutputStreamDemo(){ File file = new File(filepath); char[] ch = {'A','B','C'}; try { DataOutputStream ds = new DataOutputStream(new FileOutputStream(file)); for (char c : ch) { ds.writeChar(c); } ds.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void DataInputStreamDemo(){ File file = new File(filepath); try { DataInputStream ds = new DataInputStream(new FileInputStream(file)); char[] ch = new char[3]; char c; int len =0; while((c=ds.readChar())!='C'){ ch[len] = c; len++; } System.out.println(ch); ds.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
//DataInputStream.available()==0 判断到达文件末尾
17.合并流 SequenceInputStream
// 合并流 SequenceInputStreamDemo public static void SequenceInputStreamDemo(){ File file1 = new File("d:" + File.separator + "hello1.txt"); File file2 = new File("d:" + File.separator + "hello2.txt"); File file3 = new File("d:" + File.separator + "hello.txt"); try { InputStream input1 = new FileInputStream(file1); InputStream input2 = new FileInputStream(file2); OutputStream output = new FileOutputStream(file3); // 合并流 SequenceInputStream sis = new SequenceInputStream(input1, input2); int temp = 0; while ((temp = sis.read()) != -1) { output.write(temp); } input1.close(); input2.close(); output.close(); sis.close(); } catch (Exception e) { } }
18 ZipOutputStream
//单个文件压缩 ZipOutputStream类 public static void ZipOutputStreamDemo(){ File file = new File(filepath); File zipFile = new File(zipfilepath); try { InputStream input = new FileInputStream(file); ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream( zipFile)); zipOut.putNextEntry(new ZipEntry(file.getName())); // 设置注释 zipOut.setComment("hello"); int temp = 0; while ((temp = input.read()) != -1) { zipOut.write(temp); } input.close(); zipOut.close(); } catch (Exception e) { } }
19 多个文件压缩
// 多个文件压缩 public static void ZipOutputStreamDemo2(){ // 要被压缩的文件夹 File file = new File(zipfolderpath); File zipFile = new File("c:" + File.separator + "zipFile.zip"); InputStream input = null; try { ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream( zipFile)); zipOut.setComment("hello"); if (file.isDirectory()) { File[] files = file.listFiles(); for (int i = 0; i < files.length; ++i) { input = new FileInputStream(files[i]); zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator + files[i].getName())); int temp = 0; while ((temp = input.read()) != -1) { zipOut.write(temp); } input.close(); } } zipOut.close(); } catch (Exception e) { } }
20 单个文件解压
// 单个文件解压 public static void ZipFileDemo(){ File file = new File("d:" + File.separator + "hello.zip"); File outFile = new File("d:" + File.separator + "unZipFile.txt"); try { ZipFile zipFile = new ZipFile(file); ZipEntry entry = zipFile.getEntry("hello.txt"); InputStream input = zipFile.getInputStream(entry); OutputStream output = new FileOutputStream(outFile); int temp = 0; while ((temp = input.read()) != -1) { output.write(temp); } input.close(); output.close(); } catch (Exception e) { } }
21.多个文件解压
// 多个文件解压,当我们需要解压缩多个文件的时候,ZipEntry就无法使用了, //如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类 public static void ZipFileDemo2(){ File file = new File("d:" + File.separator + "zipFile.zip"); File outFile = null; try { ZipFile zipFile = new ZipFile(file); ZipInputStream zipInput = new ZipInputStream(new FileInputStream( file)); ZipEntry entry = null; InputStream input = null; OutputStream output = null; while ((entry = zipInput.getNextEntry()) != null) { System.out.println("解压缩" + entry.getName() + "文件"); outFile = new File("d:" + File.separator + entry.getName()); if (!outFile.getParentFile().exists()) { outFile.getParentFile().mkdir(); } if (!outFile.exists()) { outFile.createNewFile(); } input = zipFile.getInputStream(entry); output = new FileOutputStream(outFile); int temp = 0; while ((temp = input.read()) != -1) { output.write(temp); } input.close(); output.close(); } } catch (Exception e) { } }