读写文件操作

对字符流文件读写

1 写文件
  FileOutputStream 节点类 负责写字节
  OutputStreamWriter 转化类  负责字节到字符转换
  BufferedWriter 装饰类 负责写字符到缓存区
 示例:
  BufferedWriter     b=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("路径")))
2 读文件
  FileInputStream 节点类 负责写字节
  InputStreamReader 转化类  负责字节到字符转换
  BufferedReader装饰类 负责写字符到缓存区
  示例:
  BufferedReaderb=new BufferedReader(new InputStreamReader (new FileInputStream ("路径")))

进行对各种类型的二进制文件读写

1 字节型写文件
  FileOutputStream   节点类 负责写字节
  BufferedOutputStream 装饰类 负责写字符到缓存区
  DataOutputStreamWriter  转化类  负责数据类型到字节转换
 示例:
  DataOutputStreamWriter  d=new DataOutputStreamWriter (new BufferedOutputStream(new FileOutputStream("路径")))
2 字节型读文件
  FileInputStream   节点类 负责写字节
  BufferedInputStream 装饰类 负责写字符到缓存区
  DataInputStreamWriter  转化类  负责数据类型到字节转换
 示例:
  DataInputStreamWriter d=new DataInputStreamWriter (new BufferedInputStream(new FileInputStream ("路径")))
 

场景一:单机游戏的存档

存档:将游戏中的玩家对象从内存写入到硬盘上
----持久化的过程(需要对象的序列化支持)
读档:将保存在硬盘上的 对象数据读取到存档中转化成玩家对象,继续游戏

=========================================================

readme:

1.软件的基本功能:将用户输入以字节流 序列化 存到硬盘中,并读取

2.运行代码的方法:eclipse

3.简要的使用说明:输入用户等级与姓名

4.代码目录结构说明:

  运用Serializable接口封装player类,主函数调用循环是否继续存取

  

package objstream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.util.Scanner; /**
* @author CF
* @序列化与反序列化
* 前提:对象必须实现Serializable接口(序列化接口)
* 2019年3月6日
* 下午8:37:47
*/
public class objectstream {
public static final String path = "E:\\学习\\java\\程序\\test\\src\\objstream\\cc.txt";
public static void main(String[] args) {
player player1 = new player();
Scanner input=new Scanner(System.in);
System.out.println("请输入");
char a='y';
while(a=='y')
{
System.out.println("请输入姓名");
player1.setName(input.next());
System.out.println("请输入等级");
player1.setLevel(input.nextInt());
write(path,player1);
reader(path);
System.out.println("是否继续输入y/n");
a=input.next().charAt(0);
} }
public static void write(String path,player player1) { try(
FileOutputStream fout=new FileOutputStream(path);
ObjectOutputStream ostream=new ObjectOutputStream(fout)
){
ostream.writeObject(player1);
System.out.println("!");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void reader(String path) {
try(
FileInputStream finout=new FileInputStream(path);
ObjectInputStream ostrea=new ObjectInputStream(finout);
){
player plater2=(player)ostrea.readObject();
System.out.println("读出成功:"+plater2.getName()+" "+plater2.getLevel());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} } } class player implements Serializable{ private static final long serialVersionUID = -1529270225938850227L;
private String name;
private int level; public player() {}
public player(String n,int i)
{
setName(n);
setLevel(i);
} public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
} }

====================================================================================================

readme:

1.对歌词进行适当改变,读取文件每行进行判断,再写入另一文件中

2.一函数字节流 一函数字符流 都可运行

package 歌词改编;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.Writer;
/**
* @author CF
* @字符流转
* 2019年3月6日
* 下午7:01:24
*/
public class 字符流 {
public static final String path1 = "E:\\学习\\java\\程序\\test\\src\\歌词改编\\music.txt";
public static final String path2 = "E:\\学习\\java\\程序\\test\\src\\歌词改编\\change.txt";
public static final String path3 = "E:\\学习\\java\\程序\\test\\src\\歌词改编\\change1.txt"; public static String bytstring(String path) {
StringBuffer content=new StringBuffer();
Reader reader=null;
BufferedReader breader=null;
try {
reader=new FileReader(path);
breader=new BufferedReader(reader);
String line=null;
while((line=breader.readLine())!=null) {
content.append(line);
content.append(System.getProperty("line.separator"));//拼接一个系统默认分隔符
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
breader.close();
reader.close();
} catch (IOException e) {
e.printStackTrace();
} }
return content.toString(); }
public static boolean bytwrite(String str) {
FileWriter write=null;
BufferedWriter writ=null;
try {
write = new FileWriter(path2);
writ=new BufferedWriter(write);
writ.write(str);
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
writ.close();
write.close();
} catch (IOException e) {
e.printStackTrace();
}
} return true;
} public static void printwr(String str,String pathing,boolean iswrite){ try (
FileOutputStream output = new FileOutputStream(pathing);
PrintWriter writer=new PrintWriter(output);
){
writer.append(str);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}
public static void main(String[] args) {
String str=bytstring(path1);//读文件
printwr(str, path3,true);
// if(bytwrite(str))
// System.out.println("转录成功"); } }

===========================================================================================

readme:

对输入输出流进行演示

package 输入输出流;

import java.io.File;
import java.io.FileInputStream; import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream; /**
* @author CF
* @演示输入输出流用法
* 2019年2月25日
* 下午9:13:49
*/
public class FileStreamDemo { private static final String path="C:/Users/59474/Desktop/java笔记/文件.txt";
private static final String path1="C:/Users/59474/Desktop/java笔记/lala.txt"; public static void main(String[] args) throws IOException {
File file=new File(path);
InputStream inputstream=new FileInputStream(file);
byte[] bytes=new byte[20000]; inputstream.read(bytes);
// for (int i = 0; i<bytes.length; i++) {
//
// bytes[i]=(byte)inputstream.read();
// } String content=new String(bytes);
System.out.println(content);
inputstream.close();
File file1=new File(path1); OutputStream out=new FileOutputStream(file1);
String str="what`s your name?";
out.write(str.getBytes());
out.close();
}
}

@@@@@@@@@@@@@@@@@@对文件函数的总结@@@@@@@@@@@@@@@@@@

File(path)  //用file类型直接打开文件
content.append(System.getProperty("line.separator"));//拼接一个系统默认分隔符
字节流
InputStream
OutputStream             //读/写byte型文件
子类
FileinputStream(file1)  
FileOutputStream (file1)      //打开文件
ObjectInputStream          //对其目标文件进行强转成要得到的类型
ObjectOutputStream           //序列化和反序列化(实现Serializable接口)
 
 
 
字符流
Reader
Writer               //打开文件
子类
BufferedWriter           //缓冲字符输出流用其write()方法写入字符串
BufferedReader
InputStreamReader
OutputStreamWriter
PrintWriter            //用append拼接字符串
子类
FileReader(path/file)        //字符流读取文件
FileWriter(path/file)         //写入文件
 

***************************以读取文件为例****************

两者都实例化后方可:

1.先用Reader/FileinputStream打开文件后

2.再用其他子类去对文件修改

=================================================================================

Readme:

1.给定地址进行网络文件的读取操作

package 网路文件读取;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL; /**
* @author CF
* @从给定的URL上读取内容
* 2019年3月6日
* 下午7:50:04
*/
public class readerURL { public static final String path2 = "E:\\学习\\java\\程序\\test\\src\\网路文件读取\\read.html";
public static void main(String[] args) throws MalformedURLException {
URL url=new URL("http://www.163.com/index.html");
//将inputreader转换为reader的套路:使用装饰器inputstreamreader StringBuffer str=new StringBuffer();
try(BufferedReader breader=new BufferedReader(new InputStreamReader(url.openStream())))
{
String line=null;
while((line=breader.readLine())!=null)
{
str.append(line);
str.append(System.getProperty("line.separator"));
}
歌词改编.字符流.printwr(str.toString(), path2, true);
} catch (IOException e) {
e.printStackTrace();
} }
}

java 文件硬盘存取 练习的更多相关文章

  1. 小兔Java教程 - 三分钟学会Java文件上传

    今天群里正好有人问起了Java文件上传的事情,本来这是Java里面的知识点,而我目前最主要的精力还是放在了JS的部分.不过反正也不麻烦,我就专门开一贴来聊聊Java文件上传的基本实现方法吧. 话不多说 ...

  2. JAVA文件中获取路径及WEB应用程序获取路径方法

    JAVA文件中获取路径及WEB应用程序获取路径方法 1. 基本概念的理解 `绝对路径`:你应用上的文件或目录在硬盘上真正的路径,如:URL.物理路径 例如: c:/xyz/test.txt代表了tes ...

  3. java文件读写操作

    Java IO系统里读写文件使用Reader和Writer两个抽象类,Reader中read()和close()方法都是抽象方法.Writer中 write(),flush()和close()方法为抽 ...

  4. JAVA 文件编译执行与虚拟机(JVM)简单介绍

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...

  5. 从java文件和CS文件里查询方法使用次数工具

    前几天,领导让我找一下老系统(Java)里getRemoteUser方法都哪个文件用了,package是什么,方法被调用了多少次,当时因为着急,所以,直接人工找的,但是以后要是再出现,人工找就太讨厌了 ...

  6. 一个Java文件至多包含一个公共类

    编写一个java源文件时,该源文件又称为编译单元.一个java文件可以包含多个类,但至多包含一个公共类,作为编译时该java文件的公用接口,公共类的名字和源文件的名字要相同,源文件名字的格式为[公共类 ...

  7. Android Studio解决未识别Java文件(出现红J)问题

    1.问题:java文件出现了红J的问题,正常情况下应该是显示蓝色的C标识. 2.解决方案:切换到project视图下,找到app这个module里的build.gradle,在android结构里插入 ...

  8. Eclipse不自动编译java文件的终极解决方案

    最近我的eclipse经常犯傻,项目中总是有很多,启动项目也是没有启动类.查了下项目中生成的class文件,我靠竟然没有,或者还是以前的.原来是eclipse犯傻了,它没帮我自动编译java文件.一般 ...

  9. Java基础-一个java文件多个类的问题

    一个.java文件当然可以包括多个类.但这些类有一个特殊的类与其它的不同,,这个类是带public 属性的类.一个.java类文件中仅有一个public属性的类.而且这个类与文件名相同.

随机推荐

  1. nandflash裸机程序分析

    它包含7个文件: head.S init.c main.c Makefile nand.c nand.lds 我们之前的程序都是在nandflash的前4k放代码,上电后自动拷贝到SRAM中,之后将S ...

  2. js(react.js) button click 事件无法触发

    今天遇到一个诡异的问题.button 上的点击事件触发不了. 找个几个小时,原因是 js 报错了. <Button type="primary" htmlType=" ...

  3. SpringMVC 接收表单数据的方式

    1.@RequestParam @RequestMapping(value = "/xxxx.do") public void create(@RequestParam(value ...

  4. windows下利用VMware安装mac:构建…

    安装条件: 硬件:一台拥有支持虚拟技术的64位双核处理器和2GB以上内存的PC. 注意:运行MAC OS,需要电脑支持虚拟技术(VT),安装时,需要将VT启动,在BIOS中开启. 关于如何检测你的电脑 ...

  5. 刷题向》DP》放苹果 (normal)

    这篇博客可能字数比较多,而且很难讲清楚,我会努力给你们讲清楚: 首先,放苹果是一道DP,之所以难,是因为很难想到,我的确有同学用三维数组做出来,然而三维的的确比二维好理解,但三维复杂度太高,虽然DP一 ...

  6. Linux下cacti的安装

    Cacti安装手册 第一步.  Cacti的架构 第二步. Cacti的工作流程 第三步. Cacti简介 1. cacti是用php语言实现的一个软件,它的主要功能是用snmp服务获取数据,然后用r ...

  7. (一)maven的安装

    Maven下载 下载地址:http://maven.apache.org/download.cgi 下载完成后,得到一个压缩包

  8. CentOS 安装mongodb3.0 二进制包

    1.下载mongodb因为64位系统CentOS,所以下载64位的安装包: wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0 ...

  9. 数字图像处理实验(14):PROJECT 06-01,Web-Safe Colors 标签: 图像处理MATLAB 2017-05-27 20:45 116人阅读

    实验要求: Objective: To know what are Web-safe colors, how to generate the RGB components for a given jp ...

  10. 17.SQL 约束

    约束用于限制加入表的数据的类型. 可以在创建表时规定约束(通过 CREATE TABLE 语句),或者在表创建之后也可以(通过 ALTER TABLE 语句). 我们将主要探讨以下几种约束: NOT ...