zoukankan      html  css  js  c++  java
  • Java IO

    Java IO

    IO: Input And Output

    java 中有IO,即输入与输出,输入input 输出output

    java 有典型的IO与NIO,常说的IO指典型IO, 阻塞IO, NIO表示非阻塞IO

    阻塞: 等待IO任务完成才能继续下一步的操作

    非阻塞: 暂不能清晰描述,可以查看网址文章链接:http://ifeve.com/overview

    这里简单介绍Java中常见的文件读写

    字节流读写文件:

    读文件

    public static void readFile(String filePath) throws IOException {
    		File file = new File(filePath);
    		if (!file.exists() || !file.isFile()) {
    			System.out.println("file is not exist");
    		} else {
    			FileInputStream fileInputStream = new FileInputStream(file); //创建文件输入流
    			byte[] read = new byte[1024];
    			while (fileInputStream.read(read) != -1) {
    				System.out.println("read content:" + read);
    			}
    			fileInputStream.close(); // 关闭流 释放资源
    		}
    
    	}
    

    写文件

    public static void writeFile(byte[] content) throws IOException {
    		File file = new File("D:\writeFile.xml"); //获取写文件的位置
    		if (!file.exists())
    			file.createNewFile();
    		FileOutputStream fileOutputStream = new FileOutputStream(file); //创建文件输出流
    		fileOutputStream.write(content); // content 表示写入文件的内容 
    		fileOutputStream.close();	//关闭流 释放资源
    	}
    

    拷贝文件

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    import java.nio.ByteBuffer;
    import java.nio.channels.FileChannel;
    
    public class TestIO {
        
    	public static void main(String[] args) throws IOException {
    		String originFilePath = "D:\Program.md";
    		String aimFilePath = "D:\aimFile.md";
    		copyFile(originFilePath, aimFilePath);
    //		testRandonAccessFile();
    	}    
    	
    	/*
    	 * 读文件
    	 */
    	public static void readFile(String filePath) throws IOException {
    		File file = new File(filePath);
    		if (!file.exists() || !file.isFile()) {
    			System.out.println("file is not exist");
    		} else {
    			FileInputStream fileInputStream = new FileInputStream(file);
    			byte[] read = new byte[1024];
    			while (fileInputStream.read(read) != -1) {
    				System.out.println("read content:" + read);
    			}
    			fileInputStream.close();
    		}
    
    	}
    	
    	/**
    	 * 写文件
    	 * @throws IOException
    	 */
    	public static void writeFile(byte[] content) throws IOException {
    		File file = new File("D:\writeFile.xml");
    		if (!file.exists())
    			file.createNewFile();
    		FileOutputStream fileOutputStream = new FileOutputStream(file);
    		fileOutputStream.write(content);
    		fileOutputStream.close();
    	}
        
    	/*
    	 * 文件复制 -> 读取一个文件复制到另一个地方
    	 */
    	public static void copyFile(String originFilePath, String aimPath) {
    		File originFile = new File(originFilePath);
    		if (!originFile.exists()) {
    			System.err.println("file is not exists!");
    			return;   //文件不存在
    		}
    		File aimFile = new File(aimPath);
    		FileInputStream fi = null;
    		FileOutputStream fo = null;
    		try {
    			byte[] content = new byte[1024];   //每次读文件内容的字节数组
    			if (!aimFile.exists())
    				aimFile.createNewFile();
                // 通过路径转化为 输入流 和 输出流
    			fi = new FileInputStream(originFile);  //输入流
    			fo = new FileOutputStream(aimFile);	//输出流
    			while (fi.read(content) != -1) { //输入流将数据读取到字节数组,如果返回值为 -1 表示文件已经读完
    				fo.write(content); //输出流将数组内容写入文件
    			}
    		} catch (IOException e) {
    			System.err.println("read file exception!");
    			try {
    				// close resources;
    				if (fo != null)
    					fo.close();
    				if (fi != null)
    					fi.close();
    			} catch (IOException es) {
    				// TODO Auto-generated catch block
    				es.printStackTrace();
    			}
    		} finally {
    			try {
    				if (fo != null)
    					fo.close();
    				if (fi != null)
    					fi.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
        
        /*
        * java 涉及NIO的 RandomAccessFile 类
        */
    	private static void testRandonAccessFile() throws IOException {
    		RandomAccessFile aFile = new RandomAccessFile("D:\settings.xml", "rw");
    		FileChannel channel = aFile.getChannel();
    		File file = new File("D:\creatFile.xml");
    		if (!file.getParentFile().exists())
    			file.getParentFile().mkdirs();
    
    		if (!file.isFile()) {
    			System.err.println("file is not exist!");
    			System.exit(0);
    		}
    		if (!file.exists())
    			file.createNewFile();
    
    		FileOutputStream newFile = new FileOutputStream(file);
    		ByteBuffer buffer = ByteBuffer.allocate(1024);
    		int i = 0;
    		while (channel.read(buffer) != -1) {
    			i++;
    			buffer.flip();
    			while (buffer.hasRemaining()) {
    				newFile.write(buffer.get());
    			}
    			buffer.clear();
    		}
    		aFile.close();
    		newFile.close();
    		System.out.println("文件读取次数:" + i);
    	}
    
    }
    
  • 相关阅读:
    VS2008下编的程序生成的EXE 在没有安装VS2008的计算机上能运行
    GDI+使用小记
    双缓冲技术绘图
    INI文件格式及其读写
    缩放图片并保存
    按值传递&&按引用传递&&按地址传递
    傻瓜式制作的U盘winpe(支持4G以上U盘)速度超快
    vi 命令大全
    fopen和open的区别
    Linux下Socket网络编程,文件传输,数据传输的C语言例子
  • 原文地址:https://www.cnblogs.com/Narule/p/11074802.html
Copyright © 2011-2022 走看看