• java 文件读和写(整理)


    读文件

    1)按字节读取,FileInputStream用于读二进制文件,如,图片,声音,影像等

    	/**
    	 * 以字节为单位读取文件,常用于读二进制文件,如图片、声音、影像等文件。
    	 */
    	public static void readFileByBytes(String fileName) {
    		File file = new File(fileName);
    		InputStream in = null;
    		try {
    			System.out.println("以字节为单位读取文件内容,一次读一个字节:");
    			// 一次读一个字节
    			in = new FileInputStream(file);
    			int tempbyte;
    			while ((tempbyte = in.read()) != -1) {
    				System.out.write(tempbyte);
    			}
    			in.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    			return;
    		}
    		try {
    			System.out.println("以字节为单位读取文件内容,一次读多个字节:");
    			// 一次读多个字节
    			byte[] tempbytes = new byte[100];
    			int byteread = 0;
    			in = new FileInputStream(fileName);
    			ReadFromFile.showAvailableBytes(in);
    			// 读入多个字节到字节数组中,byteread为一次读入的字节数
    			while ((byteread = in.read(tempbytes)) != -1) {
    				System.out.write(tempbytes, 0, byteread);
    			}
    		} catch (Exception e1) {
    			e1.printStackTrace();
    		} finally {
    			if (in != null) {
    				try {
    					in.close();
    				} catch (IOException e1) {
    				}
    			}
    		}
    	}
    

      

    2)按字符读取,InputStreamReader用于读文本,数字等

    	/**
    	 * 以字符为单位读取文件,常用于读文本,数字等类型的文件
    	 */
    	public static void readFileByChars(String fileName) {
    		File file = new File(fileName);
    		Reader reader = null;
    		try {
    			System.out.println("以字符为单位读取文件内容,一次读一个字节:");
    			// 一次读一个字符
    			reader = new InputStreamReader(new FileInputStream(file));
    			int tempchar;
    			while ((tempchar = reader.read()) != -1) {
    				// 对于windows下,
    这两个字符在一起时,表示一个换行。
    				// 但如果这两个字符分开显示时,会换两次行。
    				// 因此,屏蔽掉
    ,或者屏蔽
    。否则,将会多出很多空行。
    				if (((char) tempchar) != '
    ') {
    					System.out.print((char) tempchar);
    				}
    			}
    			reader.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		try {
    			System.out.println("以字符为单位读取文件内容,一次读多个字节:");
    			// 一次读多个字符
    			char[] tempchars = new char[30];
    			int charread = 0;
    			reader = new InputStreamReader(new FileInputStream(fileName));
    			// 读入多个字符到字符数组中,charread为一次读取字符数
    			while ((charread = reader.read(tempchars)) != -1) {
    				// 同样屏蔽掉
    不显示
    				if ((charread == tempchars.length)
    						&& (tempchars[tempchars.length - 1] != '
    ')) {
    					System.out.print(tempchars);
    				} else {
    					for (int i = 0; i < charread; i++) {
    						if (tempchars[i] == '
    ') {
    							continue;
    						} else {
    							System.out.print(tempchars[i]);
    						}
    					}
    				}
    			}
    
    		} catch (Exception e1) {
    			e1.printStackTrace();
    		} finally {
    			if (reader != null) {
    				try {
    					reader.close();
    				} catch (IOException e1) {
    				}
    			}
    		}
    	}
    

      

    3)按行读取,BufferReader用于读面向行的格式化文件

    	/**
    	 * 以行为单位读取文件,常用于读面向行的格式化文件
    	 */
    	public static void readFileByLines(String fileName) {
    		File file = new File(fileName);
    		BufferedReader reader = null;
    		try {
    			System.out.println("以行为单位读取文件内容,一次读一整行:");
    			reader = new BufferedReader(new FileReader(file));
    			String tempString = null;
    			int line = 1;
    			// 一次读入一行,直到读入null为文件结束
    			while ((tempString = reader.readLine()) != null) {
    				// 显示行号
    				System.out.println("line " + line + ": " + tempString);
    				line++;
    			}
    			reader.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			if (reader != null) {
    				try {
    					reader.close();
    				} catch (IOException e1) {
    				}
    			}
    		}
    	}
    

      

    4)随机读取,RandomAccessFile

      RandomAccessFile类的核心价值在于RandomAccessFile.seek()方法,通过这个方法,可以任意地指定当前存取文件的指针位置。下面的代码片段实现指定随机读取文件开始指针位置:

    			// 读文件的起始位置
    			randomFile.seek(0);

     

    	/**
    	 * 随机读取文件内容
    	 */
    	public static void readFileByRandomAccess(String fileName) {
    		RandomAccessFile randomFile = null;
    		try {
    			System.out.println("随机读取一段文件内容:");
    			// 打开一个随机访问文件流,按只读方式
    			randomFile = new RandomAccessFile(fileName, "r");
    			// 文件长度,字节数
    			long fileLength = randomFile.length();
    			// 读文件的起始位置
    			randomFile.seek(0);
    			byte[] bytes = new byte[10];
    			int byteread = 0;
    			// 一次读10个字节,如果文件内容不足10个字节,则读剩下的字节。
    			// 将一次读取的字节数赋给byteread
    			while ((byteread = randomFile.read(bytes)) != -1) {
    				System.out.write(bytes, 0, byteread);
    			}
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			if (randomFile != null) {
    				try {
    					randomFile.close();
    				} catch (IOException e1) {
    				}
    			}
    		}
    	}
    

      

     

    写文件

    写文件基本有两种方式,一种新建文件直接写,另一种在文件末尾添加:

    新建文件直接写

    1)BufferedOutputStream

    	// BufferedOutputStream 2
    	public static void writeByBufferedOutputStream(String fileName,
    			String content) {
    		BufferedOutputStream bos = null;
    		try {
    			bos = new BufferedOutputStream(new FileOutputStream(new File(
    					fileName)));
    			bos.write(content.getBytes());
    			bos.flush();
    
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				bos.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    

      

    2)FileChannel

    	// FileChannel 4
    	public static void writeByFileChannel(String fileName, String content) {
    
    		FileChannel fc = null;
    		try {
    
    			fc = new FileOutputStream(new File(fileName)).getChannel();
    
    			fc.write(ByteBuffer.wrap(content.getBytes()));
    
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				fc.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    

      

     在文件末尾添加

    1)BufferedWriter

    	// BufferedWriter 1 在文件末尾添加
    	public static void writeByBufferedWriter(String fileName, String conent) {
    		BufferedWriter bw = null;
    		try {
    			bw = new BufferedWriter(new OutputStreamWriter(
    					new FileOutputStream(fileName, true)));
    			bw.append(conent);
    			bw.flush();
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				bw.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    	}
    

      

    2) FileWriter

    	// FileWriter 3 在文件末尾添加
    	public static void writeByFileWriter(String fileName, String content) {
    		FileWriter writer = null;
    		try {
    			// 打开一个写文件器,构造函数中的第二个参数true表示以追加形式写文件
    			writer = new FileWriter(new File(fileName), true);
    			writer.append(content);
    
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				writer.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    

      

     3)RandomAccessFile

    	// RandomAccessFile 5 在文件末尾添加
    	public static void writeByRandomAccessFile(String fileName, String content) {
    		RandomAccessFile randomFile = null;
    		try {
    			// 打开一个随机访问文件流,按读写方式
    			randomFile = new RandomAccessFile(fileName, "rw");
    			// 文件长度,字节数
    			long fileLength = randomFile.length();
    			// 将写文件指针移到文件尾。
    			randomFile.seek(fileLength);
    			randomFile.writeBytes(content);
    
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				randomFile.close();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    		}
    	}
    

      

    计划、执行、每天高效的活着学着
  • 相关阅读:
    揭开Socket编程的面纱(留着自己慢慢看)
    XML 新手入门基础知识
    RocketMQ集群平滑下线或重启某个节点
    RocketMQ borker配置文件
    ES:在线迁移集群索引,数据不丢失
    SQL命令汇总
    Redis过期key淘汰策略
    中间件服务器内核参数优化
    在线做RAID命令
    CPU网卡亲和绑定
  • 原文地址:https://www.cnblogs.com/huxiaoyun90/p/3326006.html
Copyright © 2020-2023  润新知