Java中的IO处理

创建文件夹:file.mkdir()

CreatDirectoryDemo.java

package com.tianjf;

import java.io.File;

public class CreatDirectoryDemo {
	public static void main(String[] args) {
		String directoryName = "D:" + File.separator + "hello";
		File file = new File(directoryName);
		file.mkdir();
	}
}

创建文件:file.createNewFile()

CreatFileDemo.java

package com.tianjf;

import java.io.File;
import java.io.IOException;

public class CreatFileDemo {
	public static void main(String[] args) {
		String fileName = "D:" + File.separator + "hello.txt";
		File file = new File(fileName);
		try {
			file.createNewFile();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

判断指定路径是文件夹还是文件:file.isDirectory() /file.isFile()

IsDirectoryOrFileDemo.java

package com.tianjf;

import java.io.File;

public class IsDirectoryOrFileDemo {
	public static void main(String[] args) {
		String directoryName = "D:" + File.separator + "hello";
		File file = new File(directoryName);
		if (file.isDirectory()) {
			System.out.println("是一个文件夹!");
		} else {
			System.out.println("不是一个文件夹!");
		}
		
		String fileName = "D:" + File.separator + "hello.txt";
		file = new File(fileName);
		if (file.isFile()) {
			System.out.println("是一个文件!");
		} else {
			System.out.println("不是一个文件!");
		}
	}
}

删除文件:file.delete()

DeleteFileDemo.java

package com.tianjf;

import java.io.File;

public class DeleteFileDemo {
	public static void main(String[] args) {
		String fileName = "D:" + File.separator + "hello.txt";
		File file = new File(fileName);
		if (file.exists()) {
			file.delete();
		} else {
			System.out.println("文件不存在");
		}
	}
}

列出所有文件夹名和所有文件名:file.list() / 列出所有文件夹路径和所有文件路径:file.listFiles()

ListFilesDemo.java

package com.tianjf;

import java.io.File;

public class ListFilesDemo {
	public static void main(String[] args) {
		String directoryName = "D:" + File.separator;
		File file = new File(directoryName);
		
		// 列出所有文件夹名和所有文件名
		String[] arrStr = file.list();
		for (int i = 0; i < arrStr.length; i++) {
			System.out.println(arrStr[i]);
		}
		
		// 列出所有文件夹路径和所有文件路径
		System.out.println("---------------------------------------");
        File[] arrFile = file.listFiles();
		for (int i = 0; i < arrFile.length; i++) {
			System.out.println(arrFile[i]);
		}

        // 列出所有文件夹路径和所有文件路径
      System.out.println("---------------------------------------");
      File[] arrFileWithFilter = file.listFiles(new FilenameFilter() {// 内部类
       @Override
       public boolean accept(File f1, String name) {
         return name.endsWith(".txt");
       }
     });
      for (int i = 0; i < arrFileWithFilter.length; i++) {
       System.out.println(arrFileWithFilter[i]);
      }
    }
}

写入字节流:FileOutputStream

FileOutputStreamDemo.java

package com.tianjf;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

public class FileOutputStreamDemo {
	public static void main(String[] args) throws IOException {
		/* 将一个字符串作为一个整体写入文件 */
		String fileName01 = "D:" + File.separator + "hello01.txt";
		File file01 = new File(fileName01);
		String str01 = "你好";
		byte[] bytes01 = str01.getBytes();
		OutputStream out01 = new FileOutputStream(file01);
		out01.write(bytes01);
        // 刷新缓存,写文件,最好加上这样的一句话
      out01.flush();
        out01.close();

		/* 将一个字符串一个字节一个字节的写入文件 */
		String fileName02 = "D:" + File.separator + "hello02.txt";
		File file02 = new File(fileName02);
		String str02 = "你好";
		byte[] bytes02 = str02.getBytes();
		OutputStream out02 = new FileOutputStream(file02);
		for (int i = 0; i < bytes02.length; i++) {
			out02.write(bytes02[i]);
		}
      out02.flush();
       out02.close();
		
		/* 追加新内容到文件中 */
		String str03 = "追加的内容";
		byte[] bytes03 = str03.getBytes();
		OutputStream out03 = new FileOutputStream(file02, true);
		for (int i = 0; i < bytes03.length; i++) {
			out03.write(bytes03[i]);
		}
		out03.flush();
        out03.close();
	}
}

读入字节流:FileInputStream

FileInputStreamDemo.java

package com.tianjf;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

public class FileInputStreamDemo {
	public static void main(String[] args) throws IOException {
		/** 知道文件大小的读取 */
		/* 整个读取 */
		String fileName = "D:" + File.separator + "hello01.txt";
		File file = new File(fileName);
		InputStream in = new FileInputStream(file);
		byte[] bytes = new byte[(int) file.length()];
		in.read(bytes);
		in.close();
		System.out.println(new String(bytes));

		/* 一个字节一个字节读取 */
		in = new FileInputStream(file);
		bytes = new byte[(int) file.length()];
		for (int i = 0; i < bytes.length; i++) {
			bytes[i] = (byte) in.read();
		}
		in.close();
		System.out.println(new String(bytes));

		/** 不知道文件大小的读取,需要判断是否读到了结尾 */
		/* 每次读取1KB */
		in = new FileInputStream(file);
		bytes = new byte[1024];
		while (true) {
			// 读取1KB的内容到数组中
			int num = in.read(bytes);
			// 返回-1则表示读到了结尾
			if (num == -1) {
				break;
			}
			// 将字节数组转换为字符串(index = 0, length = num)
			String str = new String(bytes, 0, num);
			System.out.println(str);
		}
		in.close();

		/* 一个字节一个字节的读取 */
		in = new FileInputStream(file);
		bytes = new byte[1024];
		int count = 0;
		int tempByte = 0;
		while ((tempByte = in.read()) != -1) {
			bytes[count++] = (byte) tempByte;
		}
		in.close();
		System.out.println(new String(bytes));
	}
}

写入字符流:FileWriter

FileWriterDemo.java

package com.tianjf;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class FileWriterDemo {
	public static void main(String[] args) throws IOException {
		String fileName = "D:" + File.separator + "hello.txt";
		File file = new File(fileName);
		String str = "hello";
		Writer out = new FileWriter(file);
		out.write(str);
		out.flush();
        out.close();

		/* 追加新内容到文件中 */
		out = new FileWriter(file, true);
		out.write("\r\n" + str);
		out.flush();
        out.close();
	}
}

读入字符流:FileReader

FileReaderDemo.java

package com.tianjf;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;

public class FileReaderDemo {
	public static void main(String[] args) throws IOException {
		String fileName = "D:" + File.separator + "hello.txt";
		File file = new File(fileName);
		char[] chars = new char[100];
		Reader in = new FileReader(file);
		int count = in.read(chars);
		in.close();
		System.out.println("读入的长度为:" + count);
		System.out.println("内容为:" + new String(chars, 0, count));

		/* 依次读取,需要判断是否读到了结尾 */
		chars = new char[100];
		in = new FileReader(file);
		int tempChar = 0;
		count = 0;
		while ((tempChar = in.read()) != -1) {
			chars[count++] = (char) tempChar;
		}
		in.close();
		System.out.println("内容为:" + new String(chars, 0, count));
	}
}

使用字节流好还是字符流好?

答案是字节流。首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存的,包括图片等内容。但是字符只是在内存中才会形成的,所以在开发中,字节流使用广泛。


缓冲区:BufferdReader

BufferdReaderDemo.java

package com.tianjf;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferdReaderDemo {
	public static void main(String[] args) throws IOException {
		BufferedReader br = null;
		BufferedWriter bw = null;
		bw = new BufferedWriter(new FileWriter("D:" + File.separator + "hello.txt"));
		br = new BufferedReader(new FileReader("D:" + File.separator + "hello.txt"));
		String s = null;
		for (int i = 1; i <= 100; i++) {
			s = String.valueOf(Math.random());
			bw.write(s);
			// 写入一个行分隔符
			bw.newLine();
		}
		bw.flush();
		while ((s = br.readLine()) != null) {// BufferdReader方便的方法readLine()读一行
			System.out.println(s);
		}
		bw.close();
		br.close();
	}
}

使用Scanner类从文件中读出内容

ScannerDemo.java

package com.tianjf;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class ScannerDemo {
	public static void main(String[] args) throws FileNotFoundException {
		File file = new File("d:" + File.separator + "hello.txt");
		Scanner scanner = new Scanner(file);
		while (scanner.hasNext())
		{
			System.out.println(scanner.next());
		}
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值