android studio 读取内存txt文件_年薪百万之路--第十一天 文件处理(中)

8b2e6e8b62ca96eb5d483a436de43852.png

1、文件模式

x模式(控制文件操作的模式)-》了解

x, 只写模式【不可读;不存在则创建,存在则报错】

with open('a.txt',mode='x',encoding='utf-8') as f:
    pass

b模式补充(控制文件读写内容的模式)

1、读写都是以bytes为单位2、可以针对所有文件3、一定不能指定字符编码,即一定不能指定encoding参数

with open(r'd.txt',mode='rb') as f:
     res=f.read() # utf-8的二进制
     print(res,type(res))

     print(res.decode('utf-8'))  #在b模式下的读操作需要把字符进行编码decode
        
with open(r'f.txt',mode='wb') as f:
     f.write('你好hello'.encode('utf-8'))  #写操作需要把字符进行解码encode

b模式可以应用在视频,图片格式的文件操作上,比t模式应用广泛

#文件拷贝工具
src_file=input('源文件路径>>: ').strip()
dst_file=input('源文件路径>>: ').strip()
with open(r'{}'.format(src_file),mode='rb') as f1,
    open(r'{}'.format(dst_file),mode='wb') as f2:
    # res=f1.read() # 内存占用过大
    # f2.write(res)

    for line in f1:
        f2.write(line)

t模式和b模式比较:


1、在操作纯文本文件方面t模式帮我们省去了编码与解码的环节,b模式则需要手动编码与解码,所以此时t模式更为方便
2、针对非文本文件(如图片、视频、音频等)只能使用b模式

二.文件操作的其他相关方法

<1>.读的相关操作

>>readline() : 读取一行内容,光标移动到第二行首部

with open(r'g.txt',mode='rt',encoding='utf-8') as f:
    res=f.readline()
    
    print(res)

>>readlines() : 读取每一行内容,存放于列表中

f.read()与f.readlines()都是将内容一次性读入内容,如果内容过大会导致内存溢出,若还想将内容全读入内存,则必须分多次读入,有两种实现方式:

# 方式一
with open('a.txt',mode='rt',encoding='utf-8') as f:
    for line in f:
        print(line) # 同一时刻只读入一行内容到内存中

# 方式二
with open('1.mp4',mode='rb') as f:
    while True:
        data=f.read(1024) # 同一时刻只读入1024个Bytes到内存中
        if len(data) == 0:
            break
        print(data)

<2>.写的相关操作

f.write('1111n222n')  # 针对文本模式的写,需要自己写换行符
f.write('1111n222n'.encode('utf-8'))  # 针对b模式的写,需要自己写换行符
f.writelines(['333n','444n'])  # 文件模式
f.writelines([bytes('333n',encoding='utf-8'),'444n'.encode('utf-8')]) #b模式

<3>.其它需要了解的操作

f.readable() 文件是否可读
f.writable() 文件是否可X
f.closed 文件是否关闭
f.encoding 如果文件打开模式为b,则没有该属性
f.flush() 立刻将文件内容从内存刷到硬盘
f.name() 文件名

四.文件的高级操作:控制文件指针的移动

文件内指针的移动都是Bytes为单位的,唯一例外的是t模式下的read(n),n以字符为单位
with open('a.txt',mode='rt',encoding='utf-8') as f:
data=f.read(3) # 读取3个字符
with open('a.txt',mode='rb') as f:
data=f.read(3) # 读取3个Bytes

>>f.seek(指针移动的字节数,模式控制): 模式控制:0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的f.seek(9,0)

1: 该模式代表指针移动的字节数是以当前所在的位置为参照的

f.seek(9,1)

2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的,应该倒着移动

f.seek(-9,2)

PS : 只有0模式可以在t下使用,1、2必须在b模式下用

>>f.tell() 获取文件指针当前位置

要在Android Studio读取txt文件,可以使用FileInputStream和BufferedReader来实现。首先,需要在AndroidManifest.xml文件添加读取文件的权限。然后在代码使用FileInputStream打开txt文件,并使用BufferedReader逐行读取文件内容。可以使用try-catch语句来处理文件读取过程可能出现的异常。 以下是一个简单的示例代码: ```java try { FileInputStream fileInputStream = openFileInput("example.txt"); InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream); BufferedReader bufferedReader = new BufferedReader(inputStreamReader); StringBuilder stringBuilder = new StringBuilder(); String line; while ((line = bufferedReader.readLine()) != null) { stringBuilder.append(line).append("\n"); } String fileContent = stringBuilder.toString(); bufferedReader.close(); inputStreamReader.close(); fileInputStream.close(); // 在这里可以对读取到的文件内容进行处理 // 比如在TextView显示 TextView textView = findViewById(R.id.textView); textView.setText(fileContent); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } ``` 以上代码首先打开名为"example.txt"的txt文件,然后逐行读取文件的内容,并将内容存储到一个字符串。最后可以将读取到的文件内容显示在TextView。 这是一个简单的读取txt文件的示例,实际开发可能需要根据具体的需求进行更灵活的处理。希望这能够帮助到你。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值