JAVA文件简单字节读写

package file;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
/**
 * File输入输出演示
 *@author 摸打滚爬一路向前
 *@version 1.0
 */
public class File_class {
	private File file;//创建文件和目录路径名的抽象表示形式变量。
	/**构造函数**/
	public File_class(String url,String name) {
		/*根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
		*如果 parent 为 null,则创建一个新的 File 实例,这与调用以给定 child 
		*路径名字符串作为参数的单参数 File 构造方法效果一样。
		*/
		file=new File(url, name);
	}
	/**构造函数**/
	public File_class(String url) {
		/*通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
		 *如果给定字符串是空字符串,那么结果是空抽象路径名。
		 */
		file=new File(url);
	}
	/**
	 * 获取文件名
	 * @return String
	 */
	public String getFileName() {
		/*返回由此抽象路径名表示的文件或目录的名称。该名称是路径名名称序列中
		 * 的最后一个名称。如果路径名名称序列为空,则返回空字符串。
		 */
		return file.getName();
	}
	/**
	 * 获取文件路径
	 * @return String
	 */
	public String getFilePath() {
		/*将此抽象路径名转换为一个路径名字符串。所得字符串使用默认名称分隔符分隔
		 * 名称序列中的名称。
		 */
		return file.getPath();
	}
	/**
	 * 创建字节流向文件写数据<br>
	 * 从创建的对象fil处获取字节流
	 * @return void
	 * @throws FileNameException 
	 */
	public void writeFile() throws FileNameException {	
		try {
			/*文件输出流是用于将数据写入 File 或 FileDescriptor 的输出流。文件是否可
			 * 用或能否可以被创建取决于基础平台。特别是某些平台一次只允许一个 FileOutputStream(或其他文件写入对象)
			 * 打开文件进行写入。在这种情况下,如果所涉及的文件已经打开,则此类中的构造方法将失败。 
             *FileOutputStream 用于写入诸如图像数据之类的原始字节的流。要写入字符流,请考虑使
             *用 FileWriter
             */
			FileOutputStream out=new FileOutputStream(file);
			/*public void write(byte[] b)
               throws IOException
			 * 将 b.length 个字节从指定 byte 数组写入此文件输出流中
			 */
			out.write("我有一只小毛驴,从来也不骑".getBytes());
			System.out.println("写入完毕");
			/*关闭此文件输出流并释放与此流有关的所有系统资源。此文件输出流不能再用于写入字节。
			 * 
			 */
			out.close();
		} catch (IOException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		
	}
	/**
	 * 用字节流读取内容读取文件内容
	 * @return String
	 * @throws FileNameException
	 */
	public String readerFile()throws FileNameException {
		/*测试此抽象路径名表示的文件是否是一个目录
		 * 
		 */
		if (!file.exists()) {
			throw new FileNameException("读取文件路径不存在");
		}
		else if ( file.length() == 0) {
			System.out.println("空文件");
			return null;
		}
		//创建字节数组
		byte[] byt=new byte[1024];
		int len = 0;
		try {   
			/*FileInputStream 从文件系统中的某个文件中获得输入字节。
			 * 哪些文件可用取决于主机环境。 		
             *FileInputStream 用于读取诸如图像数据之类的原始字节流。
             *要读取字符流,请考虑使用 FileReader。
             */
			FileInputStream in=new FileInputStream(file);
			/*从此输入流中将最多 b.length 个字节的数据读入一个 byte 数组中。
			 * 在某些输入可用之前,此方法将阻塞。 
			 */
			 len=in.read(byt);
			 in.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return new String(byt,0,len);	
	}
/**
 * 主函数 创建File_class对象,向其输入信息后读取其中信息并输出,并且输出文件名和路径
 * @param args
 * @throws FileNameException
 */
	public static void main(String[] args) throws FileNameException {
		File_class file_class=new File_class("C:\\Users\\Administrator\\Desktop\\test.txt");
		file_class.writeFile();
		System.out.println(file_class.readerFile());
		System.out.println(file_class.getFileName());
		System.out.println(file_class.getFilePath());
		}
}
/**
 * 自定义异常类
 * @author 摸打滚爬一路向前
 *
 */
class FileNameException extends Exception{
	/**
	 * 
	 */
	private static final long serialVersionUID = -3599721275508980926L;
	String message;
	public FileNameException(String ErrowMesssge) {
		message=ErrowMesssge;
	}
	public String getMessage() {
		return message;
	}
}

注意 :

write()方法有3个,write(int b) write(byte[] b) 和write(byte[] b,int off,int len)
要注意write(int b)的用法:
之前以为使用out.write()前要实现OutputStream匿名内部类

new OutputStream() {
				@Override
				public void write(int b) throws IOException {
					// TODO 自动生成的方法存根	
				}
			};
			out.write(35);

**但后来无意中调试时候删除了OutputStream匿名内部类发现out.write(35)依旧可以写进文件,继续改变int b大小

for(int i=0;i<600;i++) {
    	outputStream.write(i);
    	}

结果为:
write(int b)循环600结果

发现b的范围包含ASCCII码的十进制表示即0~127,但又比ASCII多一些。
API文档关于write(int b):**

将指定字节写入此文件输出流。实现 OutputStream 的 write 方法。

嗯,越来越迷糊了 眼冒金星。等期末考试后再深究吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值