当前位置:  编程技术>综合
本页文章导读:
    ▪[疯狂Java讲义精粹] 第十章|输入/输出      0. Java的IO通过java.io包下的类和接口来支持, java.io包下主要包括输入和输出两种IO流, 每种输入、输出流又可分为字节流和字符流两大类(字节流以字节来处理输入输出操作, 字符流以字符来处理).........
    ▪JavaCookbook-3.字符串与4.正则表达式            Java的字符串是一个预定义的类型,也就是说一个字符串并不是一个数组,而是一个对象。需要注意的是,java的字符串是一个不可修改的字符串,所有对他的修改最后都生成了.........
    ▪MAC下 在VMware上运行Windows Phone 8模拟器……      众所周知,Windows Phone 8 模拟器运行,必须开启hyper-v。最开始我安装的顺序是 VMware--->Win8--->WP8 SDK--->开启VMware的设置、处理器和内存、高级选项,选中“在此虚拟机中启用虚拟化管理程.........

[1][疯狂Java讲义精粹] 第十章|输入/输出
    来源: 互联网  发布时间: 2013-11-10

0. Java的IO通过java.io包下的类和接口来支持, java.io包下主要包括输入和输出两种IO流, 每种输入、输出流又可分为字节流和字符流两大类(字节流以字节来处理输入输出操作, 字符流以字符来处理). 此外, Java的IO流使用了一种装饰器设计模式, 将IO流分成"底层节点流"和"上层处理流", 节点流用于和底层的物理存储节点直接关联--不同的物理节点获取节点流的方式可能存在一定的差异, 但程序可以把不同的物理节点流包装成统一的处理流, 从而允许程序使用统一的输入输出代码来读取不同的物理存储节点的资源. 

- Java7在java.nio及其子包下提供了一系列全新的API, 这些API是对原有新IO(NIO)的升级, 因此也被称为NIO2. 通过这些NIO2能更高效地进行输入输出操作. 


1. File类
File类是代表与平台无关的文件和目录, 在程序中操作文件和目录都可以通过File来完成. 但File不能访问文件内容本身, 如需访问文件内容本省要用输入/输出流. 
1.1 常用的方法
  • 访问文件名相关方法:
    - String getName(): 返回文件名或路径名(如果是路径, 返回最后一级子路径名). 
    - String getPath()
    - File getAbsoluteFile()
    - String getAbsolutePath()
    - String getParent(): 返回此File对象所对应目录(最后一级子目录)的父目录名. (当使用相对路径的File对象来获取父路径时可能引起错误, 因为该方法返回将File对象所对
    应的目录名、文件名里最后一个子目录名、子文件名删除后的结果.)
    - boolean renameTo(File newName) 
  • 文件检测相关方法:
    - boolean exists()
    - boolean canWrite()
    - boolean canRead():
    - boolean isFile()
    - boolean isDirectory()
    - boolean isAbsolute():判断File对象所对应的文件或目录是否是绝对路径. 在UNIX/Linux/BSD上, 如果路径名开头是一条斜线(/), 表名该File对象对应一个绝对路径; Windows上, 开头是盘符, 则绝对路径. 
  • 获取常规文件信息: 
    - long lastModified(): 返回文件的最后修改时间. 
    - long length(): 返回文件内容的长度. 
  • 文件操作相关方法: 
    - boolean createNewFile() 
    - boolean delete()
    - static File createTempFile(String prefix, String suffix): 在默认的临时文件目录中和创建一个临时空文件, 使用给定的前缀、系统生成的随机数和给定后缀作为文件名. prefix参数至少是三个字节长. suffix参数指定后缀(形如".txt"), 可以为null, 此时将使用默认的后缀".tmp". 
    - static File createTempFile(String prefix, String suffix, File directory)
    - void deleteOnExit(): 注册一个删除钩子, 指定当Java虚拟机退出时, 删除File对象所对应的文件和目录. 
  • 目录操作相关方法: 
    -boolean mkdir(): 试图创建一个File对象所对应的目录. 调用该方法时File对象必须对应一个路径(不是文件). 
    - String[] list(): 列出File对象的所有子文件名和路径名. 
    public String[] list(FilenameFilter filter)

    - File[] listFiles(): 列出File对象的所有子文件和路径. 
    - static File[] listRoots(): 列出系统所有的根路径(就是所有盘符). 
  • import java.io.*;
    
    public class FileTest
    {
    	public static void main(String[] args)
    			throws IOException
    	{
    		File file = new File(".");
    		System.out.println(file.getName());
    		System.out.println(file.getParent());
    		System.out.println(file.getAbsoluteFile().getParent());
    
    		File tmpFile = File.createTempFile("aaa", ".txt", file);
    		tmpFile.deleteOnExit();
    
    		File newFile = new File(System.currentTimeMillis() + "");
    		System.out.println(newFile.exists());
    		newFile.createNewFile();
    		newFile.mkdir();   // ? 以newFile对象创建一个目录, 因为newFile已经存在所以无法创建该目录
    		String[] fileList = file.list();
    		for (String fileName: fileList)
    		{
    			System.out.println(fileName);
    		}
    		File[] roots = File.listRoots();
    		for (File root: roots)
    		{
    			System.out.println(root);
    		}
    	}
    }
    * Java支持将斜线(/)当成平台无关的路径分隔符. (所以Windows下表示路径用"\\"(转义成\)行, 用"/"也行.)
    * Windows平台的换行符是\r\n; UNIX/Linux/BSD的是\n. 
    1.2 文件过滤器
    // 列出当前路径下所有文件夹, 和以".java"结尾的文件
    import java.io.*;
    
    public class FilenameFilterTest
    {
    	public static void main(String[] args)
    	{
    		File file = new File(".");
    		String[] nameList = file.list(new MyFilenameFilter());
    		for (String name : nameList)
    		{
    			System.out.println(name);
    		}
    	}
    }
    
    class MyFilenameFilter implements FilenameFilter 
    {
    	public boolean accept(File dir, String name)
    	{
    		return name.endsWith(".java")
    			|| new File(name).isDirectory();
    	}
    }
    2. Java的IO流
    - Java把不同的输入/输出源(键盘、文件、网络连接等)抽象表述为"流(stream)", 通过流的方式允许程序使用相同的方式访问不同输入/输出源. stream是从起源(source)到接受(sink)的"有序"数据. 
    - 所有传统的流类型(类或抽象类)都放在java.io包中. 
    2.1 流的分类
  • 输入流和输出流.
    - 输入流: 只能从中读取数据, 不能写入. 
    - 输出流 
    # 划分输入/输出是从程序运行所在的内存的角度来考虑的. 
    # Java的输入流主要由InputStream和Reader作为基类, 输出流主要以OutputStream和Writer作为基类. (他们都是抽象类. 可以用FileInputStream/FileReader/FileOutputStream/FileWriter创建实例.) 
  • 字节(byte)流和字符(char)流.
    # 用法几乎完全一样, 但字节流操作的数据单元是8位的字节, 字符流操作的数据单元是16位的字符. 
    # 字节流主要由InputStream和OutoutStream作为基类, 字符流以Reader和Writer. 
  • 节点流和处理流. 
    - 节点流是可以从一个特定的IO设备读/写数据的流, 使用节点流是程序直接连接到实际的数据源. 节点流也叫低级流(Low Level Stream). 
    - 处理流用于的对一个已存在的流进行连接或封装, 通过封装后的流来实现读/写功能. 处理流也叫高级流. 
    # 使用处理流时程序不会直接连接到实际的数据源, 没有和实际的输入/输出节点连接. 
    # Java用处理流来包装节点流是"装饰器设计模式", 可以消除不同节点流的实现差异, 也能提供更方便的方法来完成输入/输出功能. 所以处理流也叫包装流. 
  • 3. 字节流和字符流
    InputStream/Reader是所有输入流的抽象基类, 前者是字节输入流, 后者是字符输入流.
    OutputStream/Writer是所有输出类的抽象基类. 前者是字节输入流, 后者是字符输入流.
    3.1 InputStream和Reader
  • InputStream的常用方法:
    - int read(): 从输入流读取单个字节, 返回所读取的字节数据(字节数据可直接转换成int类型). 
    - int read(byte[] b): 从输入流最多读取b.length个字节的数据, 并将其存储在字节数组b中, 返回实际读取的字节数.
    - int read(byte[] b, int off, int len): 从输入流的off位置开始最多读取len个字节的数据, 并将其存储在数组b中. 返回实际读取的字节数. 
  • Reader常用方法:
    - int read(): 字符数据可直接转换成int类型. 
    - int read(char[] cbuf)
    - int read(char[] cbuf, int off, int len)
  • 它们都支持的移动指针记录的方法:
    - void mark(int readAheadLimit): 在记录指针当前位置记录一个标记(mark).
    - boolean markSupported(): 是否支持标记. 
    - void reset(): 将此流的记录指针重新定位到标记(mark)位置. 
    - long skip(long n): 记录指针向前移动你个字节/字符. 
  • 3.2 OutputStream和Writer
  • 常用方法:
    - void write(int c): 将指定的字节/字符输出到输出流中. 
    - void write(byte[]/char[] buf)
    - void write(byte[]/char[] buf, int off, int len):将字节数组/字符数组中从off位置开始, 长度为len的字节/字符输出到输出流中. 
  • 因为字符流以字符作操作单位, 所以Writer可以用字符串代替字符数组, 即以String对象作为参数. 
  • 4. 输入/输出流体系
    4.1 处理流用法
    //用PrintStream处理流包装OutputStream
    import java.io.*;
    
    public class PrintStreamTest
    {
    	public static void main(String[] args)
    	{
    		try(
    			FileOutputStream fos = new FileOutputStream("test.txt");
    			PrintStream ps = new PrintStream(fos))
    		{
    			ps.println("normal string. ");
    			ps.println(new PrintStreamTest());
    		}
    		catch (IOException ioe)
    		{
    			ioe.printStack      
        
    [2]JavaCookbook-3.字符串与4.正则表达式
        来源: 互联网  发布时间: 2013-11-10

          Java的字符串是一个预定义的类型,也就是说一个字符串并不是一个数组,而是一个对象。需要注意的是,java的字符串是一个不可修改的字符串,所有对他的修改最后都生成了新的字符串。同时String类也是一个final类,所以不可对String类进行继承,来借以对它进行修改。如果要修改字串本身,可以采用StringBuilder(StringBuffer)对象。

          一般,我们常用substring、StringTokenizer来分解字符串,StringTokenizer类实现了迭代器模式和枚举接口。

    StringTokenizerst = new StringTokenizer("wang xiaohu, is a good man!","!,");
             while (st.hasMoreTokens()) {
                       System.out.println(st.nextToken());
             }

          参数" !,"指定了字符串分割符,如果没有这个参数,字符串以空格为分隔符,分割后的字符串包括标点符号。在使用+号连接字符串时,编译器将自动构建一个StringBuiler对象,并且调用其append方法。StringBuilder对象在使用时,其所有的操作都是返回本身,这样对效率影响比较低。

          使用堆栈来翻转字符串的方法为:

    StringTokenizerst = new StringTokenizer("wang xiaohu, is a good man!","!,");
             Stack s = new Stack();
             while (st.hasMoreTokens()) {
                       s.push(st.nextElement());
             }
             while (!s.empty()) {
                       System.out.print(s.pop()+"");
             }

          正则表达式已经被列入Java1.4之后的运行环境,其语法不再赘述。使用方法为:1.测试模式,测试更定字符串是否符合正则表达式。2.查找匹配文本。3.替换匹配文本。例程如下:

    1. 测试模式,测试更定字符串是否符合正则表达式。

    "g8".matches("^g[a-zA-Z0-9]$")

    2. 查找匹配文本

    Pattern p =Pattern.compile("(.*), (.*)");
                       Matcher m = p.matcher("Smith,John Adams, John quincy");
                       System.out.println(m.groupCount());
                       if(m.find())
                       {
                                System.out.println(m.group(1)+m.group(2));
                       }

    3.替换匹配文本。一般文本编辑器命令中,左手边是替换模式,右手边是替换文本。

    参考文章

    1.      JavaCookbook-1.编译、运行和调试

    作者:gongqingkui 发表于2013-1-8 21:04:31 原文链接
    阅读:28 评论:0 查看评论

        
    [3]MAC下 在VMware上运行Windows Phone 8模拟器……
        来源: 互联网  发布时间: 2013-11-10

    众所周知,Windows Phone 8 模拟器运行,必须开启hyper-v。最开始我安装的顺序是 VMware--->Win8--->WP8 SDK--->开启VMware的设置、处理器和内存、高级选项,选中“在此虚拟机中启用虚拟化管理程序”。但此步骤却不能正常开启hyper-v。

    于是乎搜索网上各种教程,也问了几个大神。最后终于搞定,现在将我的操作步骤贴出来,希望能给有此需求的朋友一个借鉴。

    步骤1、安装VMware Fusion(我装的版本是5.0.1)

    步骤2、安装Windows 8(我装的是专业版),装好后将虚拟机内的Win8系统关闭。

    步骤3、找到VMware的“虚拟机资源库”,

    步骤4、右击你的资源,并点击“在Finder中显示”

    步骤5、找到虚拟系统的资源后,右击--->显示包内容

    步骤6、找到 "文件名.vmx" 文件后,右击--->打开方式--->文本编辑


    步骤7、讲以下两行内容添加进去,并保存。(注意看看原文件内是否又以下内容,别加重复了)

    hypervisor.cpuid.v0 = "FALSE"

    vhv.enable = "TRUE"

    步骤8、打开VMware的设置--->处理器和内存--->高级选项--->选中“在此虚拟机中启用虚拟化管理程序”。(最好处理器选成“2个处理器核心”,并分配4G内存)

    步骤9、重新运行模拟器,并将WIndows8的Hyper-v打开:控制面板--->程序和功能--->启用或关闭Windows功能--->选中Hyper-V。

    步骤10、安装Windows Phone 8的SDK,之后再试试。看看能不能运行WP8的模拟器了……



    OK。至此,也就完成了!屌丝的逆袭啊!!!哈哈……这里要多些各位大神的帮助哦.


    附几个我参考的网址

    http://www.dotblogs.com.tw/jasonyah/archive/2012/11/08/80959.aspx

    http://www.dotblogs.com.tw/chou/archive/2012/11/06/80545.aspx

    http://vniklas.djungeln.se/2012/04/23/windows-server-2012-8-beta-hyper-v-enabled-inside-a-vmware-fusion-vm/

    http://www.veeam.com/blog/nesting-hyper-v-with-vmware-workstation-8-and-esxi-5.html

    作者:blue601 发表于2013-1-8 21:00:14 原文链接
    阅读:51 评论:0 查看评论

        
    最新技术文章:
    ▪error while loading shared libraries的解決方法    ▪版本控制的极佳实践    ▪安装多个jdk,多个tomcat版本的冲突问题
    ▪简单选择排序算法    ▪国外 Android资源大集合 和个人学习android收藏    ▪.NET MVC 给loading数据加 ajax 等待loading效果
    ▪http代理工作原理(3)    ▪关注细节-TWaver Android    ▪Spring怎样把Bean实例暴露出来?
    ▪java写入excel2007的操作    ▪http代理工作原理(1)    ▪浅谈三层架构
    ▪http代理工作原理(2)    ▪解析三层架构……如何分层?    ▪linux PS命令
    ▪secureMRT Linux命令汉字出现乱码    ▪把C++类成员方法直接作为线程回调函数    ▪weak-and算法原理演示(wand)
    ▪53个要点提高PHP编程效率    ▪linux僵尸进程    ▪java 序列化到mysql数据库中
    ▪利用ndk编译ffmpeg    ▪活用CSS巧妙解决超长文本内容显示问题    ▪通过DBMS_RANDOM得到随机
    ▪CodeSmith 使用教程(8): CodeTemplate对象    ▪android4.0 进程回收机制    ▪仿天猫首页-产品分类
    ▪从Samples中入门IOS开发(四)------ 基于socket的...    ▪工作趣事 之 重装服务器后的网站不能正常访...    ▪java序列化学习笔记
    ▪Office 2010下VBA Addressof的应用    ▪一起来学ASP.NET Ajax(二)之初识ASP.NET Ajax    ▪更改CentOS yum 源为163的源
    ▪ORACLE 常用表达式    ▪记录一下,AS3反射功能的实现方法    ▪u盘文件系统问题
    ▪java设计模式-观察者模式初探    ▪MANIFEST.MF格式总结    ▪Android 4.2 Wifi Display核心分析 (一)
    ▪Perl 正则表达式 记忆方法    ▪.NET MVC 给loading数据加 ajax 等待laoding效果    ▪java 类之访问权限
    ▪extjs在myeclipse提示    ▪xml不提示问题    ▪Android应用程序运行的性能设计
    ▪sharepoint 2010 自定义列表启用版本记录控制 如...    ▪解决UIScrollView截获touch事件的一个极其简单有...    ▪Chain of Responsibility -- 责任链模式
    ▪运行skyeye缺少libbfd-2.18.50.0.2.20071001.so问题    ▪sharepoint 2010 使用sharepoint脚本STSNavigate方法实...    ▪让javascript显原型!
    ▪kohana基本安装配置    ▪MVVM开发模式实例解析    ▪sharepoint 2010 设置pdf文件在浏览器中访问
    ▪spring+hibernate+事务    ▪MyEclipse中文乱码,编码格式设置,文件编码格...    ▪struts+spring+hibernate用jquery实现数据分页异步加...
    ▪windows平台c++开发"麻烦"总结    ▪Android Wifi几点    ▪Myeclipse中JDBC连接池的配置
    ▪优化后的冒泡排序算法    ▪elasticsearch RESTful搜索引擎-(java jest 使用[入门])...    ▪MyEclipse下安装SVN插件SubEclipse的方法
    ▪100个windows平台C++开发错误之七编程    ▪串口转以太网模块WIZ140SR/WIZ145SR 数据手册(版...    ▪初识XML(三)Schema
    ▪Deep Copy VS Shallow Copy    ▪iphone游戏开发之cocos2d (七) 自定义精灵类,实...    ▪100个windows平台C++开发错误之八编程
    ▪C++程序的内存布局    ▪将不确定变为确定系列~Linq的批量操作靠的住...    ▪DIV始终保持在浏览器中央,兼容各浏览器版本
    ▪Activity生命周期管理之三——Stopping或者Restarti...    ▪《C语言参悟之旅》-读书笔记(八)    ▪C++函数参数小结
    ▪android Content Provider详解九    ▪简单的图片无缝滚动效果    ▪required artifact is missing.
    ▪c++编程风格----读书笔记(1)    ▪codeforces round 160    ▪【Visual C++】游戏开发笔记四十 浅墨DirectX教程...
    ▪【D3D11游戏编程】学习笔记十八:模板缓冲区...    ▪codeforces 70D 动态凸包    ▪c++编程风格----读书笔记(2)
    ▪Android窗口管理服务WindowManagerService计算Activity...    ▪keytool 错误: java.io.FileNotFoundException: MyAndroidKey....    ▪《HTTP权威指南》读书笔记---缓存
    ▪markdown    ▪[设计模式]总结    ▪网站用户行为分析在用户市场领域的应用
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3