Java 的进阶之路一

Java 的进阶之路一

一、实例化File对象

File file = new File(fileLocation);//这里的fileLocation就是一个字符串,指的是文件的目录放在哪里,一个地址
FileInputStream input = new FileInputStream(file);//把文件放进输入流中


File file = new File(fileLocation);
FileOutputStream fos=new FileOutputStream(file);//把文件放入输出流中

1、File file = new File(fileLocation);//这里的fileLocation就是一个字符串,指的是文件的目录放在哪里,一个地址

FileInputStream input = new FileInputStream(file);//把文件放进输入流中

2、File file = new File(fileLocation);

FileOutputStream fos=new FileOutputStream(file);//把文件放入输出流中

二、String,StringBuilder以及StringBuffer这三个类的区别

String为字符串常量,而StringBuilderStringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的。以下面一段代码为例:

1 String str="abc";
2 System.out.println(str);
3 str=str+"de";
4 System.out.println(str);

 

  如果运行这段代码会发现先输出“abc”,然后又输出“abcde”,好像是str这个对象被更改了,其实,这只是一种假象罢了,JVM对于这几行代码是这样处理的,首先创建一个String对象str,并把“abc”赋值给str,然后在第三行中,其实JVM又创建了一个新的对象也名为str,然后再把原来的str的值和“de”加起来再赋值给新的str,而原来的str就会被JVM的垃圾回收机制(GC)给回收掉了,所以,str实际上并没有被更改,也就是前面说的String对象一旦创建之后就不可更改了。所以,Java中对String对象进行的操作实际上是一个不断创建新的对象并且将旧的对象回收的一个过程,所以执行速度很慢。

而StringBuilder和StringBuffer的对象是变量,对变量进行操作就是直接对该对象进行更改,而不进行创建和回收的操作,所以速度要比String快很多。

1 String str="abc"+"de";
2 StringBuilder stringBuilder=new StringBuilder().append("abc").append("de");
3 System.out.println(str);
4 System.out.println(stringBuilder.toString());

在线程安全上,StringBuilder是线程不安全的,而StringBuffer是线程安全的

  如果一个StringBuffer对象在字符串缓冲区被多个线程使用时,StringBuffer中很多方法可以带有synchronized关键字,所以可以保证线程是安全的,但StringBuilder的方法则没有该关键字,所以不能保证线程安全,有可能会出现一些错误的操作。所以如果要进行的操作是多线程的,那么就要使用StringBuffer,但是在单线程的情况下,还是建议使用速度比较快的StringBuilder

总结一句话:这三者创建的都是对象,但是只有string创建后不可以再修改,只能赋值完之后被回收,但是其他两个可以用函数append去追加新的字符串,例如StringBuilder stringBuilder=new StringBuilder().append("abc").//这里注意append里写的是string类型的,如果是byte【】字节型数组类型的对象是要转化成string类型的对象例如append(new String(bt))

三、byte[]类和string类的转化

String string = "hello world";
byte[] bytes = string.getBytes(); //Convert to byte[]
String s = new String(bytes); //Convert back to String

Byte[]是字节型数组

四、读read()函数用法

从 BufferedReader 对象读取一个字符要使用 read() 方法,它的语法如下:

int read( ) throws IOException

每次调用 read() 方法,它从输入流读取一个字符并把该字符作为整数值返回。 当流结束的时候返回 -1。该方法抛出 IOException。

当然int count=input.read(bt);//input是

FileInputStream文件输入流的类

//bt是byte[] bt

这里的read函数就是把bf里的东西用bt读出来后返回一个int型的数字,若为-1则说明流结束。

int count = 0;
while((count = input.read(bt))!=-1) {
               bf.append(new String(bt)).append("\n");
           }

Bt是byte[]字符型数组,bf是stringbuffer的对象

五、写write()函数用法

public void write(byte[] w)
把指定数组中w.length长度的字节写到OutputStream中。

所以里面必须是字节型数组,所以如果你想放的原来是一个字符串的话,那么就要转化成字节型数组.getbytes();

六、字符流BufferedReader

BufferedReader可以用来读取文件或者接收来自键盘(控制台)的信息。它比Scanner更加快捷,能够大幅度缩短程序运行时间。它下面的readline()方法可以一次性读取一行文字(String),非常方便。需要注意的是,使用BufferedReader对象的readLine()方法必须处理java.io.IOException异常(Exception)。以及,在使用完BufferredReader以后,需要用close()方法关闭流。

BufferedReader 由Reader类扩展而来,提供通用的缓冲方式文本读取,而且提供了很实用的readLine,读取一个文本行,从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
一般用法:

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("ming.txt")));
  String data = null;
  while((data = br.readLine())!=null)
  {
   System.out.println(data); 
  }

猜你喜欢

转载自www.cnblogs.com/xuyinyin/p/10844538.html