FileInputStream类的其他常用方法()

/**在project下新建temp文件,内容为abcdef*FileInputStream类的其他常用方法:* int available():返回流当中剩余的没有读到的I姐数量* long skap(long n):跳过几个字节不读* */
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;public class FileInputStreamTest05 {public static void main(String[] args) {// TODO Auto-generated method stubFileInputStream fis = null;try {// 相对路径,放在同一个projtct下fis = new FileInputStream("temp");/** fis.skip(3); System.out.println(fis.read());//100*/System.out.println("总字节数量:" + fis.available());// 不太适合大文件,因为byte数组不能太大byte[] bytes = new byte[fis.available()];fis.read(bytes);System.out.println(new String(bytes));// abcdef} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (fis != null) {try {fis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}

FileInputStream和FileOutputStream定义一个工具类,实现文件的复制

CopyTest类

public class CopyTest {public static void main(String[] args) throws FileNotFoundException {// TODO Auto-generated method stub// 相对路径FileInputStream fin = new FileInputStream("temp.pdf");FileOutputStream fos = new FileOutputStream("temp1.pdf");CopyTheFile copyTheFile = new CopyTheFile();copyTheFile.copy(fin, fos);}
}

CopyTheFile类

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class CopyTheFile {public static void copy(FileInputStream is, FileOutputStream os) {FileInputStream fis = null;FileOutputStream fos = null;try {fis = is;fos = os;byte[] bytes = new byte[1024 * 1024];// 一次最多拷贝1Mint readCount = 0;while ((readCount = fis.read()) != -1) {fos.write(bytes, 0, readCount);}fos.flush();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {if (fis != null) {try {fis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (fos != null) {try {fos.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
}

缓冲流

  • 字节流

  • 字符流
 public static void read(File file) throws FileNotFoundException {FileReader fr = new FileReader(file);// 装饰者模式BufferedReader br = new BufferedReader(fr);char[] chars = new char[200];int len = 0;try {/* while ((len = fr.read(chars)) > 0) {for (int i = 0; i < len; i++) {System.out.print(chars[i]);}}*/// 使用缓冲流一行一行读取String line = null;while ((line = br.readLine()) != null) {System.out.println(line);}} catch (IOException e) {e.printStackTrace();} finally {try {fr.close();br.close();} catch (IOException e) {e.printStackTrace();}}}

Propertes(属性,特性)

**以下内容参考自心悦飞飞

  • Propertes文件
  • java所支持的配置文件类型,用于表达配置信息
  • 文件类型为*.properties,格式为文本文件
  • 文件的内容的格式是:”键 = 值“的格式,可以用"#"来作注释
    Properties类
  • 主要用于读取Java配置文件,表示一组持久的属性。
  • properties属性可以保存到流中或从流中加载。
    properties属性列表中的每个键及其对应的值都是一个字符串。
    properties属性列表可以包含另一个属性列表作为其“默认值”;
    如果在原始属性列表中找不到属性键,则会搜索此第二个属性列表。
  • 由于Properties继承自Hashtable,所以put和putAll方法可以应用于Properties对象。强烈地不推荐使用它们,因为它们允许调用者插入其键或值不是字符串的条目。应该使用setProperty方法。
  • load—加载;
    store–存储;
    load(Reader)/store(Writer,String)方法以一个简单的面向行的格式从以下格式加载和存储属性到基于字符的流。
    load(InputStream)/store(OutputStream,String)方法的工作方式与加载(Reader)/存储(Writer,String)对相同,只是输入/输出流以ISO
    8859-1字符编码编码
  • 新建.properties文件的方法:File->new->File->输入”名称.properties“
    常用方法
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import java.util.Properties;
import java.util.Set;public class Test1 {public static void main(String[] args) {File file = new File("C:\\Users\\Zhouliting\\eclipse-workspace\\practice324\\bin\\practice1\\a.properties");System.out.println(file.exists());System.out.println(file.getName());System.out.println(file.getAbsolutePath());InputStream is = Test1.class.getResourceAsStream("a.properties");Properties properties = new Properties();OutputStream os = null;try {//加载properties文件内容内容properties.load(is);//用set集合进行遍历Set<Object> keys = properties.keySet();for(Object key:keys) {System.out.println(key.toString()+"="+properties.getProperty(key.toString()));}//设置属性值properties.setProperty("high", "178");URL url = Test1.class.getResource("a.properties");System.out.println(url.getPath());//os = new FileOutputStream(new File(url.getPath()));os = new FileOutputStream(file.getAbsoluteFile());System.out.println(file.getAbsolutePath());//添加内容properties.store(os, "添加成功!");os.flush();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}// bin下面一般都是放编译后的文件,而src是放源文件的地方,可以在bin目录下查看已经添加high属性和"添加成功"的文档}}

xml文件读写

  • 以下内容参考自菜鸟教程
  • 定义:指可扩展标记语言,被设计用来存储和传输数据,其焦点是数据的内容。是独立于软件和硬件的信息传输工具
  • 用途:常用于简化数据的存储和共享
  • 把数据从HTML分离
  • 简化数据共享
  • 简化数据传输
  • 简化平台变更
  • 用于创建新的互联网语言
  • 一个 XML 文档实例
  • 第一行是 XML 声明。它定义 XML 的版本(1.0)和所使用的编码(UTF-8 : 万国码, 可显示各种语言)。
  • 下一行描述文档的根元素(像在说:“本文档是一个便签”)
  • 接下来 4 行描述根的 4 个子元素(to, from, heading 以及 body)
  • 最后一行定义根元素的结尾
  • 可以假设,从这个实例中,XML 文档包含了一张 Jani 写给 Tove 的便签。
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
  • XML 文档形成一种树结构
  • XML 文档必须包含根元素。该元素是所有其他元素的父元素。
  • XML 文档中的元素形成了一棵文档树。这棵树从根部开始,并扩展到树的最底端。
  • 父、子以及同胞等术语用于描述元素之间的关系。父元素拥有子元素。相同层级上的子元素成为同胞(兄弟或姐妹)。
  • 所有的元素都可以有文本内容和属性(类似 HTML 中)。
<root>
<child>
<subchild>.....</subchild>
</child>
</root>

示例:

<bookstore><book category="COOKING"><title lang="en">Everyday Italian</title><author>Giada De Laurentiis</author><year>2005</year><price>30.00</price></book><book category="CHILDREN"><title lang="en">Harry Potter</title><author>J K. Rowling</author><year>2005</year><price>29.99</price></book><book category="WEB"><title lang="en">Learning XML</title><author>Erik T. Ray</author><year>2003</year><price>39.95</price></book>
</bookstore>
<!--  实例中的根元素是 <bookstore>。
文档中的所有 <book> 元素都被包含在 <bookstore> 中。
<book> 元素有 4 个子元素:<title>、<author>、<year>、<price> -->

示例:

package com.situ.chapter7;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.util.List;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;public class Test1 {public static void main(String[] args) {InputStream is = Test1.class.getResourceAsStream("student.xml");System.out.println(is == null);// 使用dom4j读取xml文件。Document Object ModelSAXReader reader = new SAXReader();try {//读取出文档对象Document doc = reader.read(is);//获取根节点Element root = doc.getRootElement();System.out.println(root.getName());//返回根节点的所有子节点List<Element> elems = root.elements();for(Element elem:elems) {//每个elem就是一个student元素System.out.println(elem.attributeValue("id"));//获取指定名称的子节点Element name = elem.element("name");//System.out.println(name.getName());System.out.println("name:"+name.getText());Element sex = elem.element("sex");System.out.println("sex: "+ sex.getText());Element age = elem.element("age");System.out.println("age: "+age.getText());   }//如果想往xml中写入数据,返回新增的节点Element element = root.addElement("student");//设置属性element.addAttribute("id", "004");Element name = element.addElement("name");name.setText("赵六");element.addAttribute("sex", "男");element.addAttribute("age", "20");URL url = Test1.class.getResource("student.xml");System.out.println(url);OutputStream os = new FileOutputStream(new File(url.getPath()));//创建一个输出格式OutputFormat of = OutputFormat.createPrettyPrint();//定义xml写入器XMLWriter writer = new XMLWriter(os,of);//把xml文档写入到字节输出流writer.write(doc);//os.flush();} catch (DocumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (UnsupportedEncodingException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

student.xml为

<?xml version="1.0" encoding="UTF-8"?>
<students><student id="001"><name>张三</name><sex>男</sex><age>20</age></student><student id="002"><name>李四</name><sex>女</sex><age>20</age></student><student id="003"><name>王五</name><sex>男</sex><age>22</age></student>
</students>

网络socket编程

  • 网络:在计算机领域,网络是信息传输、接受、共享的虚拟平台,可以实现信息共享
  • 网络编程:网络编程从大的方面说就是对信息的发送到接收。通过操作相应Api调度计算机硬件资源,并利用传输管道(网线)进行数据交换的过程。
  • 七层网络模型OSI
  • 基础层:物理层(Physical)、数据链路层(Datalink)、 网络层(Network)
  • 传输层(Transport) : TCP-UDP协议层、Socket
  • Socket:
  • 简单来说是IP地址与端口的结合协议( RFC 793 )一种地址与端口的结合描述协议,TCP/IP协议的相关API的总称;是网络Api的集合实现。
    *作用与组成: 在网络传输中用于唯一标示两个端口的链接。端点:包括(IP+Port )。4个要素:客户端地址、客户端端口、服务器地址、服务器端口
  • 传输原理:

SocketTCP构建TCP客户端,服务端,客户端发送数据,服务器读取数据并打印

发送端:

package com.situ.chapter8;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;public class Server {public static void main(String[] args) throws IOException {ServerSocket server = new ServerSocket(2000);System.out.println("已发起服务器连准备就绪!");// 输出本地地址和端口地址System.out.println("服务器信息:" + server.getInetAddress() + "p: " + server.getLocalPort());// 等待客户端连接for (;;) {Socket client = server.accept();ClientHandler clientHandler = new ClientHandler(client);clientHandler.start();}}/*** 客户端消息处理* * @author Zhouliting**/private static class ClientHandler extends Thread {private Socket socket;private boolean flag = true;public Socket getSocket() {return socket;}public ClientHandler(Socket socket) {super();this.socket = socket;}@Overridepublic void run() {// TODO Auto-generated method stubsuper.run();// 打印客户端端口和地址System.out.println("新客户端连接:" + socket.getInetAddress() + "p: " + socket.getPort());try {// 得到打印流,用于数据输出,服务器会送数据使用PrintStream socketOutput = new PrintStream(socket.getOutputStream());// 得到输入流,用于接受数据BufferedReader socketInput = new BufferedReader(new InputStreamReader(socket.getInputStream()));do {String str = socketInput.readLine();if ("bye".equalsIgnoreCase(str)) {flag = false;// 回送socketOutput.println("bye");} else {// 打印到屏幕,并回送数据长度System.out.println(str);socketOutput.println("回送:" + str.length());}} while (flag);socketInput.close();socketOutput.close();} catch (Exception e) {// TODO: handle exceptionSystem.out.println("连接异常断开!");} finally {// 连接关闭try {socket.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println("客户端已退出:" + socket.getInetAddress() + "p: " + socket.getPort());}}}

接收端:

package com.situ.chapter8;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.Inet4Address;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketException;public class Client {public static void main(String[] args) throws IOException {Socket socket = new Socket();// 超时时间socket.setSoTimeout(3000);// 连接本地,端口2000,超时时间3000;socket.connect(new InetSocketAddress(Inet4Address.getLocalHost(), 2000), 3000);System.out.println("已发起服务器连接,连接成功!");// 输出本地地址和端口地址System.out.println("客户端信息:" + socket.getLocalAddress() + "p: " + socket.getLocalPort());System.out.println("服务器信息:" + socket.getInetAddress() + "p: " + socket.getPort());try {// 发送接收数据todo(socket);} catch (Exception e) {// TODO Auto-generated catch blockSystem.out.println("异常关闭!");}// 释放资源socket.close();System.out.println("客户端已退出!");}// 发送数据public static void todo(Socket client) throws IOException {// 构建键盘输入流InputStream in = System.in;BufferedReader input = new BufferedReader(new InputStreamReader(in));// 得到Socket输出流,并转换为打印流OutputStream outputStream = client.getOutputStream();PrintStream socketPrintStream = new PrintStream(outputStream);// 得到Socket输入流,并转换为BufferedReaderInputStream inputStream = client.getInputStream();BufferedReader sockBufferedReader = new BufferedReader(new InputStreamReader(inputStream));boolean flag = true;do {// 键盘读取一行String str = input.readLine();// 发送到服务器socketPrintStream.println(str);// 从服务器读一行String echo = sockBufferedReader.readLine();if ("bye".equalsIgnoreCase(echo)) {flag = false;} else {System.out.println(echo);}} while (flag);sockBufferedReader.close();socketPrintStream.close();}}

内部类:就是在一个类中定义一个类

**以下内容参考自序猿之徒

  • 定义格式:
  • 访问特点:内部类可以直接访问外部类的成员,包括私有。外部类要访问内部类的成员,必须创建对象
public class Outer {​private int num = 10;
​public class Inner{public void show(){System.out.println(num);}}
​public void method(){Inner i = new Inner();i.show();}
​
}
  • 主要包括:成员内部类,静态内部类,局部内部类,匿名内部类
  • 成员内部类(非静态内部类) :作为外部类的成员。特点:由于是外问类成员,可以使用成员访问修饰符。成员内部类持有一个指向其外部类的引用。成员内部类,可以直接访问外部类的成员。
  • 静态内部类:类成员,属于类,而不属于对象,类似于其它静态成员。特点:属于静态成员,只能访问外部类的静态成员。无需创建外部类的对象,即可创建内部类的对象。
  • 局部内部类:使用频率极低。定义在一个局部的作用域(非类)里。特点:有作用域和生命周期的,作用域外部无法访问。
  • 匿名内部类:使用得多一点。 特点:没有名称,继承父类,或实现接口,在定义类的同时,创建此类的唯一实例。

以下内容参考自liu771626413

  • 成员内部类:在类的成员位置
  • 外界如何创建对象使用?
  • 格式:外部对象名.内部对象名 对象名 = 外部对象.内部类对象;
    范例:Outer.Inner or = new Outer().new Inner();
  • 1、Inner类定义在Outer类的内部,相当于Outer类的成员变量的位置,Inner类可以使用任意访问修饰符,如:public、private、protected等。
    2、Inner类中定义的test()方法可以访问Outer类中的数据,不受访问控制符的影响。
    3、 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );如创建Inner的内部类对象:要先创建外部类对象:Outer o = new outer(); 创建内部类:Inner i = o.new Inner();访问Inner中的test()方法:i.test();
  • 例如:
  • 4、如果外部类和内部类具有相同的成员变量或方法,内部类可以直接访问内部类的成员变量或方法,但如果内部类访问外部类的成员变量或者方法时,需要使用this关键字;如下:
  • 静态内部类:用static修饰的内部类
  • 1、静态内部类不能直接访问外部类的非静态成员,但可以通过new 外部类().成员的方式访问;
  • 2、如果外部类的静态成员与内部类的静态成员相同, 可以通过"类名.静态成员"来访问外部类的静态成员;如果不同,可以直接调用外部类的静态成员名。
  • 3、创建静态内部类的对象时,不需要外部类的对象,可以直接创建;
  • 局部内部类:局部内部类是在方法中定义的类,所以外界是无法直接使用,需要在方法内部创建对象并使用该类可以直接访问外部类的成员。也可以访问方法内的局部变量
  • 匿名内部类:存在一个类或者接口,这里的类可以是具体类也可以是抽象类
  • 格式:
  • 范例:
  • 本质:是一个继承了该类或者实现了该接口的子类匿名对象
  • 匿名内部类在开发中的使用:

接口

public interface Jumpping {​void jump();
​
}

接口实现类

public class Cat implements Jumpping {​@Overridepublic void jump() {System.out.println("猫可以跳高了 ");}
}

接口操作类

public class JumppingOperator {public void method(Jumpping j){j.jump();}
}

测试类

public class JumppingDemo {public static void main(String[] args) {//需求,创建接口操作类的对象,调用method方法JumppingOperator jo = new JumppingOperator();Jumpping j = new Cat();jo.method(j);//如果多了,而且只用一次,每次都创建过于麻烦jo.method(new Jumpping() {@Overridepublic void jump() {System.out.println("小狗也可以跳高了");}});}
}

java基础 day12-FileInputStream类,文件的复制,缓冲流,Propertes文件,xml文件读写,网络socket编程(构建TCP客户端),内部类相关推荐

  1. java IO之 File类+字节流 (输入输出 缓冲流 异常处理)

    1. File类 File 路径问题: 上下级文件夹之间使用分隔符分开: 在Windows中分隔符为'\' ,在Unix/Linux中分隔符为'/' 跨平台分隔符: 专业的做法是使用File.sepa ...

  2. 【狂神说笔记—— Java基础07-常用类】

    Java基础07-常用类 Object类 大家都知道Object是所有类的父类,任何类都默认继承Object. 理论上Object类是所有类的父类,即直接或间接的继承java.lang.Object类 ...

  3. Java基础day12

    Java基础day12 Java基础部分day12-内部类&常用API 1. 参数传递 1.1 类名作为形参和返回值 1.2 抽象类作为形参和返回值 1.3 接口名作为形参和返回值 2. 内部 ...

  4. Java基础复习-常用类

    Java基础复习-常用类 本文仅对学习过程中所缺java知识点的查缺补漏复习 String 代表字符串.Java程序中的所有字符串字面值(如"abc")都作为此类的实例实现. St ...

  5. Java基础 ----常用时间类

    Java基础 ----常用时间类 java.util.Date java.util.Calendar java.text.SimpleDateFormat new Date().getTime() & ...

  6. Java基础:String类

    相关阅读 Java基础:String类 Java字符串格式化 Java基础:正则表达式 1. 概述 字符串是由多个字符组成的一串数据(字符序列),字符串可以看成是字符数组. 在实际开发中,字符串的操作 ...

  7. 多重继承_Python 和 Java 基础对比 10 —— 类的封装、继承和多态

    @Python大星 一.Python 类的封装.继承和多态 封装 继承 Python 支持多父类的继承机制,所以需要注意圆括号中基类的顺序,若是基类中有相同的方法名,并且在子类使用时未指定,Pytho ...

  8. 一文带你深入理解【Java基础】· 枚举类

    写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...

  9. java基础练习复习二:递归字节流字符流二

    本篇是基于java基础练习复习一:递归&字节流&字符流一, 如果对您有帮助 ,请多多支持.多少都是您的心意与支持,一分也是爱,再次感谢!!!打开支付宝首页搜"55672346 ...

最新文章

  1. 在 react 里使用 antd
  2. ALIN10129-自查方案
  3. java多线程(二)——锁机制synchronized(同步方法)
  4. python执行过程_Python threading模块condition原理及运行流程详解
  5. 设计模式之GOF23工厂模式02
  6. 计算机应用基础题库及答案
  7. Shell脚本中各种括号用法
  8. vmware死机,mvx.exe进程关不掉情况
  9. Javascript Module Pattern,公共属性不能获取到最新值(Javascript revealing module pattern, public properties)
  10. 产品经理不再纸上谈兵——关于用户默认头像的思考
  11. html缩放动画效果,CSS3鼠标hover背景图片缩放动画效果
  12. 《庄子·内篇·逍遥游第一》
  13. 今日话题:微信再次更新搜索框,公众号会更加火爆?
  14. Dalvik 指令学习
  15. 建设智能工厂建设,主要划分为哪几步?
  16. 红帽Redhat—Linux磁盘管理
  17. .NET类比学JAVA之访问SqlServer数据库
  18. mac与linux服务器之间使用ssh互通有无
  19. Remote Development Tips and Tricks
  20. Java语法(全面解析)

热门文章

  1. 树莓派视觉跟踪小车_树莓派智能小车结合摄像头opencv进行物体追踪
  2. C# 使用SharpGL-Perspective和LookAt
  3. autojs通知栏_监听通知栏失败,请教大佬!
  4. 分治算法 求第k小元素 O(n) O(nlog2^n)
  5. 苹果手机可以投影到墙上吗_怎么将手机上的投影到电视上或墙上?
  6. leetcode1062
  7. Sourcetree 分支合到主干
  8. 针对m3u8视频加密的一些尝试
  9. app开屏广告实现——借助webview和原生fetch请求实现
  10. 企业安全风险的来源有哪些?