java 硬盘_java 文件硬盘存取 练习

这篇博客详细介绍了Java中文件的读写操作,包括使用字符流和字节流的示例,以及对象的序列化和反序列化。同时,讲解了如何利用FileInputStream、FileOutputStream、BufferedReader和BufferedWriter等类进行文件读写。此外,还展示了如何通过网络URL读取文件内容,并将其保存到本地。内容涵盖了基本的输入输出流用法和实际应用场景。
摘要由CSDN通过智能技术生成

读写文件操作

对字符流文件读写

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类,主函数调用循环是否继续存取

packageobjstream;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.io.OutputStream;importjava.io.Serializable;importjava.util.Scanner;/***@authorCF

* @序列化与反序列化

* 前提:对象必须实现Serializable接口(序列化接口)

* 2019年3月6日

* 下午8:37:47*/

public classobjectstream {public static final String path = "E:\\学习\\java\\程序\\test\\src\\objstream\\cc.txt";public static voidmain(String[] args) {

player player1= newplayer();

Scanner input=newScanner(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 voidwrite(String path,player player1) {try(

FileOutputStream fout=newFileOutputStream(path);

ObjectOutputStream ostream=newObjectOutputStream(fout)

){

ostream.writeObject(player1);

System.out.println("!");

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}

}public static voidreader(String path) {try(

FileInputStream finout=newFileInputStream(path);

ObjectInputStream ostrea=newObjectInputStream(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 implementsSerializable{private static final long serialVersionUID = -1529270225938850227L;privateString name;private intlevel;publicplayer() {}public player(String n,inti)

{

setName(n);

setLevel(i);

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public intgetLevel() {returnlevel;

}public void setLevel(intlevel) {this.level =level;

}

}

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

readme:

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

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

package歌词改编;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.FileReader;importjava.io.FileWriter;importjava.io.IOException;importjava.io.PrintWriter;importjava.io.Reader;importjava.io.Writer;/***@authorCF

* @字符流转

* 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 staticString bytstring(String path) {

StringBuffer content=newStringBuffer();

Reader reader=null;

BufferedReader breader=null;try{

reader=newFileReader(path);

breader=newBufferedReader(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();

}

}returncontent.toString();

}public static booleanbytwrite(String str) {

FileWriter write=null;

BufferedWriter writ=null;try{

write= newFileWriter(path2);

writ=newBufferedWriter(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,booleaniswrite){try(

FileOutputStream output= newFileOutputStream(pathing);

PrintWriter writer=newPrintWriter(output);

){

writer.append(str);

}catch(FileNotFoundException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(IOException e1) {

e1.printStackTrace();

}

}public static voidmain(String[] args) {

String str=bytstring(path1);//读文件

printwr(str, path3,true);//if(bytwrite(str))//System.out.println("转录成功");

}

}

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

readme:

对输入输出流进行演示

package输入输出流;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;/***@authorCF

* @演示输入输出流用法

* 2019年2月25日

* 下午9:13:49*/

public classFileStreamDemo {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) throwsIOException {

File file=newFile(path);

InputStream inputstream=newFileInputStream(file);byte[] bytes=new byte[20000];

inputstream.read(bytes);//for (int i = 0; i

//bytes[i]=(byte)inputstream.read();//}

String content=newString(bytes);

System.out.println(content);

inputstream.close();

File file1=newFile(path1);

OutputStream out=newFileOutputStream(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网路文件读取;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.net.MalformedURLException;importjava.net.URL;/***@authorCF

* @从给定的URL上读取内容

* 2019年3月6日

* 下午7:50:04*/

public classreaderURL {public static final String path2 = "E:\\学习\\java\\程序\\test\\src\\网路文件读取\\read.html";public static void main(String[] args) throwsMalformedURLException {

URL url=new URL("http://www.163.com/index.html");//将inputreader转换为reader的套路:使用装饰器inputstreamreader

StringBuffer str=newStringBuffer();try(BufferedReader breader=new BufferedReader(newInputStreamReader(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();

}

}

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值