首页 文章 精选 留言 我的

精选列表

搜索[构建目录],共10000篇文章
优秀的个人博客,低调大师

dart系列之:如丝滑般柔顺,操作文件和目录

简介 文件操作是IO中非常常见的一种操作,那么对应dart语言来说,操作文件是不是很简单呢?实际上dart提供了两种读取文件的方式,一种是一次性全部读取,一种是将文件读取为流。 一次性读取的缺点是需要将文件内容一次性全部载入到内存中,如果遇到文件比较大的情况,就会比较尴尬。所以还需要流式读取文件的方式。一起来看看dart中这两种文件的读取方式吧。 File 事实上dart中有很多地方都有File这个类,这里我们要讲解的File类是dart:io包中的。 读取整个文件 File代表一个整体的文件,他有三个构造函数,分别是: factory File(String path) factory File.fromUri(Uri uri) factory File.fromRawPath(Uint8List rawPath) 其中最常用的就是第一个构造函数。 我们可以这样来构造一个文件: var file = File('file.txt'); 有了文件之后,就可以调用File中的各种读取方法。 文件读取本身有两种形式,一种是文本,一种是二进制。 如果是文本文件,File提供了readAsString的方法,将整个文件读取为字符串。 Future<String> readAsString({Encoding encoding: utf8}); 我们可以这样使用: var stringContents = await file.readAsString(); 另外,我们还可以一行一行的对文件进行读取: Future<List<String>> readAsLines({Encoding encoding: utf8}); 结果返回的是一个List,list中表示文件每行的内容。 var lines = await file.readAsLines(); 上面两个方法是异步的方法,File还提供了两个同步的方法: String readAsStringSync({Encoding encoding: utf8}); List<String> readAsLinesSync({Encoding encoding: utf8}); 如果文件是二进制,那么可以使用readAsBytes或者同步的方法readAsBytesSync: Future<Uint8List> readAsBytes(); Uint8List readAsBytesSync(); dart中表示二进制有一个专门的类型叫做Uint8List,他实际上表示的是一个int的List。 还是刚刚的文件,我们看下怎么以二进制的形式进行读取: var file = File('file.txt'); var contents = await file.readAsBytes(); 以流的形式读取文件 上面我们讲到的读取方式,都是一次性读取整个文件,缺点就是如果文件太大的话,可能造成内存空间的压力。 所以File为我们提供了另外一种读取文件的方法,流的形式来读取文件. 相应的定义方法如下: Stream<List<int>> openRead([int? start, int? end]); 我们看一个基本的使用: import 'dart:io'; import 'dart:convert'; Future<void> main() async { var file = File('file.txt'); Stream<List<int>> inputStream = file.openRead(); var lines = utf8.decoder .bind(inputStream) .transform(const LineSplitter()); try { await for (final line in lines) { print('Got ${line.length} characters from stream'); } print('file is now closed'); } catch (e) { print(e); } } 随机访问 一般情况下文件是顺序访问的,但是有时候我们需要跳过某些前面的数据,直接跳转到目标地址,则需要对文件进行随机访问。 dart提供了open和openSync两个方法来进行随机文件读写: Future<RandomAccessFile> open({FileMode mode: FileMode.read}); RandomAccessFile openSync({FileMode mode: FileMode.read}); RandomAccessFile提供了对文件的随机读写方法。非常好用。 文件的写入 写入和文件读取一样,可以一次性写入或者获得一个写入句柄,然后再写入。 一次性写入的方法有四种,分别对应字符串和二进制: Future<File> writeAsBytes(List<int> bytes, {FileMode mode: FileMode.write, bool flush: false}); void writeAsBytesSync(List<int> bytes, {FileMode mode: FileMode.write, bool flush: false}); Future<File> writeAsString(String contents, {FileMode mode: FileMode.write, Encoding encoding: utf8, bool flush: false}); void writeAsStringSync(String contents, {FileMode mode: FileMode.write, Encoding encoding: utf8, bool flush: false}); 句柄形式可以调用openWrite方法,返回一个IOSink对象,然后通过这个对象进行写入: IOSink openWrite({FileMode mode: FileMode.write, Encoding encoding: utf8}); var logFile = File('log.txt'); var sink = logFile.openWrite(); sink.write('FILE ACCESSED ${DateTime.now()}\n'); await sink.flush(); await sink.close(); 默认情况下写入是会覆盖整个文件的,但是可以通过下面的方式来更改写入模式: var sink = logFile.openWrite(mode: FileMode.append); 处理异常 虽然dart中所有的异常都是运行时异常,但是和java一样,要想手动处理文件读写中的异常,则可以使用try,catch: Future<void> main() async { var config = File('config.txt'); try { var contents = await config.readAsString(); print(contents); } catch (e) { print(e); } } 总结 以上就是dart中的文件操作了。 本文已收录于http://www.flydean.com/23-dart-file/ 最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现! 欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

优秀的个人博客,低调大师

Java JDK目录下的jmap和jhat工具的使用方式

Suppose you have a running Java process and you would like to inspect its running status, for example how many object instance are created or memory consumption status, you can use some standard tool provided by JDK.This blog is written based on JDK 1.8.The sample code I am using to simulate a endless running process: package jmap; class Tool{ private int count = 0; public void Run() throws InterruptedException{ while(true){ System.out.println("Hello: " + this.count++); Thread.sleep(5000); } } } public class JMapTest { public static void main(String[] args) throws InterruptedException { Tool tool = new Tool(); tool.Run(); } } (1) First get process id found in task manager: 15392 (2) use command linejmap -dump:format=b,file=c:\temp\heapstatus.bin 15392jmap is a standard tool provided by JDK in this folder in my laptop: heap bin file is generated now: (3) Use another tool jhat to parse the bin file:jhat c:\temp\heapstatus.bin Then access localhost:7000 in browser: Click hyperlink class jmap.Tool, now I can find out that the instance of my tool class @0x7166babd8 has member attribute count with value 49. (4) There is a plugin in Eclipse MAT – Memory Analyzer Tool which can achieve the same.Once plugin is installed, you can make them visible in “Show View”: Drag your bin file into the view and the heap file will be parsed automatically.Click “Find object by address”: Type address of object instance you want to inspect: You can get the same result as you get previously in localhost:7000 本文来自云栖社区合作伙伴“汪子熙”,了解相关信息可以关注微信公众号"汪子熙"。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册