iO串流
文件编码:
①gbk编码:中文占用2个字节,英文占用1个字节
②utf-8编码:中文占用3个字节,英文占用1个字节
登入後複製
③java是双字节编码 utf-16be,中文占用2个字节,英文占用2个字节
登入後複製
④当你的字节序列是某种编码时,若想把该字节序列变成字符串,也必须用这种编码方式,不能直接使用String str = new String(byteStr);否则系统会使用默认的编码,从而出现乱码
登入後複製
⑤文本文件就是字节序列,可以是任意编码的字节序列,如果我们在中文机器上直接创建文本文件,则该文本文件只认识ansi编码
登入後複製
在eclipse项目下创建的项目可以指定项目的编码形式。eclipse默认的“GBK”编码不能识别“utf-8”的文件。若是将eclipse中创建的“utf-8”文件复制到电脑上是可以识别的,但是!在电脑本地上创建的“utf-8”文件,电脑识别不了
登入後複製
File类常用API的使用:
java.io.File类在Java中表示文件或目录。
登入後複製
File类只用于表示文件(目录)的信息(名称、大小等),不能用于文件内容的访问。
登入後複製
创建File对象:File file=new File(String path);
登入後複製
两种创建“日记1.txt”文件的方法
登入後複製
<br>
登入後複製
登入後複製
可以通过 alt+/ 查看构造函数
登入後複製
注意:盘符后跟双斜杠 \\ 或者 /
登入後複製
1. file.seperater();获取系统分隔符
登入後複製
2. file.exists();是否存在.存在返回true,不存在返回false
登入後複製
3. file.mkdir();或者file.mkdirs();创建目录或多级目录。
登入後複製
4. file.isDirectory()或者file.isFile()判断是否是目录或者是否是文件。是返回true,不是为false
登入後複製
5. file.delete();删除文件/文件夹。
登入後複製
6. file.createNewFile();创建新文件。
登入後複製
7. file.getName()获取文件名称。
登入後複製
8. file.getAbsolutePath()获取绝对路径。
登入後複製
9. file.getParent();获取父级绝对路径
登入後複製
file类的遍历目录
File对象 dir
登入後複製
dir.isDirectory() 判断当前路径是否为目录
登入後複製
dir.list()返回String[],用于列出当前目录下的子目录和文件(不包含子目录下的名称)
登入後複製
如果要遍历子目录下的内容就需要构造成File对象做递归操作
登入後複製
File files = dir.listFiles();//返回的是直接子目录(文件)的抽象
登入後複製
RomdonAccessFile基本操作
Java提供的对文件内容的访问,可以读内容也可以写内容
登入後複製
支持随机访问文件,可以访问文件的任意位置
登入後複製
(1)Java文件模型
登入後複製
在硬盘上是byte bytebyte存储的,是数据的集合
登入後複製
(2)打开文件
登入後複製
有两种模式“rw”读写 和“r”只读
登入後複製
RondomAccessFile raf = new RondomAccessFile(file,”rw”);
登入後複製
文件指针 打开文件时指针在开头pointer = 0;
登入後複製
(3) 写方法
登入後複製
Raf.writer(int)---à只写一个字节(后八位),同时指针指向下一个位置,准备再次写入
登入後複製
(4)读方法
登入後複製
int b = raf.read()--à从指针在的位置读一个字节
登入後複製
(5)文件读写完之后一定要关闭
登入後複製
(6)代码
登入後複製
public static void main(String[] args) throws IOException{
登入後複製
File demo = new File("demo");//新建一个File对象,如果没有写绝对路径则是默认在项目路径下
登入後複製
if(!demo.exists())
登入後複製
demo.mkdir();
登入後複製
File file = new File(demo,"raf.dat");//在demo下创建文件raf.dat
登入後複製
if(!file.exists())
登入後複製
file.createNewFile();//在项目下新建了demo文件夹,其中有raf.dat文件
登入後複製
<br>
登入後複製
RandomAccessFile raf = new RandomAccessFile(file,"rw")//创建读内容的对象raf
登入後複製
//指针的位置,写一个字节指针移一位
登入後複製
System.out.println(raf.getFilePointer()); //开始时在控制台输出0
登入後複製
raf.write('A');//只写了一个字节(后8位)
登入後複製
System.out.println(raf.getFilePointer());//输出1
登入後複製
int i = 0x7fffffff;//用write方法每次只能写一个字节,若要把i写进去就得写4次
登入後複製
<br>
登入後複製
登入後複製
此时输出6
登入後複製
raf.writeInt(i);//直接写一个int
登入後複製
System.out.println(raf.getFilePointer());//输出10
登入後複製
String s = "中";
登入後複製
byte[] gbk = s.getBytes("gbk");
登入後複製
raf.write(gbk);
登入後複製
System.out.println(raf.getFilePointer());//输出12 中文两个字节
登入後複製
<br>
登入後複製
登入後複製
登入後複製
//读文件,必须把指针移到头部
登入後複製
ref.seek(0);
登入後複製
//一次性读取,把文件中的内容都读到字节数组中
登入後複製
byte[] buf = new byte[(int)raf.length];
登入後複製
raf.read(buf);
登入後複製
System.out.println(Array.toString(buf));
登入後複製
<br>
登入後複製
登入後複製
登入後複製
//用十六进制包装 重新输入
登入後複製
for(byte b:buf){
登入後複製
System.out.println(Integer.toHexString(b & 0xff)+"");
登入後複製
}
登入後複製
登入後複製
<br>
登入後複製
登入後複製
登入後複製
//最后一定要加上close()方法
登入後複製
}
登入後複製
登入後複製
五、字节流
读写文件时以字节为单位
登入後複製
1) 有两个父类:InputStream和OutputStream
登入後複製
InputStream是抽象类,抽象了应用程序读取数据的方式
登入後複製
OutputStream抽象了应用程序写出数据的方式
登入後複製
2) EOF = End 或 读到-1就读到结尾
登入後複製
3) 输入流基本方法(in是输入流对象)
登入後複製
int b = in.read();//读取一个字节无符号填充到int低八位,-1是EOF
登入後複製
in.read(byte[] buf) 读取数据填充到字节数组buf
登入後複製
int.read(byte[] buf,int start,int size) 读取数据到字节数组buf,从buf的start位置开始存放size长度的数据
登入後複製
4) 输出流基本方法(进行写的操作)
登入後複製
out.write(int b) 写出一个byte到流,b的低八位
登入後複製
out.write(byte[] buf) 将buf字节数组都写入到流
登入後複製
out.write(byte[] buf,int start,int size) 字节数组buf从start位置开始写size长度的字节到流
登入後複製
以上是iO串流的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章
<🎜>:種植花園 - 完整的突變指南
3 週前
By DDD
<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
如何修復KB5055612無法在Windows 10中安裝?
3 週前
By DDD
北端:融合系統,解釋
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前
By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...
