Java小知识总结:

1. URLconnection   2.UUID   3.添加数据到文件结尾   4.内部类的调用   5. 读取txt文件  6. 复制文件>60M


一、URLconnection:代表应用程序和URL之间的通讯连接。此类可以用于读取和写入此URL引用的资源。

使用方法:

1. 通过URL调用openConnection方法创建对象

2. 处理设置参数和一般请求属性。

3. 是用connect方法建立到远程对象的实际连接

4. 远程对象变为可用。投资端和内容变为可访问

例:访问网站的资源大小



URL url = new URL("http://www.baidu.com/");
URLConnection urlConn = url.openConnection();
urlConn.connect();
System.out.println("网站一共包括"+urlConn.getContentLength()+"字节");

二、UUID:表示通用唯一标识符(UUID)类,UUID表示一个128位的值

例:取得32位的唯一标识:



byte[] name = new byte[111];
System.out.println("伪随机获取UUID:  "+UUID.randomUUID().toString());
System.out.println("根据指定字节数获取UUID:"+UUID.nameUUIDFromBytes(name));
System.out.println("指定省去‘-’:   "+UUID.randomUUID().toString().replaceAll("-", ""));

三、添加数据到文件的末尾

public static void main(String[] args) {
		BufferedWriter out = null;
		try
		{
			out = new BufferedWriter(new FileWriter("D:\\file.txt", true));//这里的true是将数据写入到文件末尾,文件没有将会被创建
			for(int i=0;i<100;i++){//像文件中写入100次,'String'
				out.write("String");
			}
		} catch (IOException e) {
			e.printStackTrace();
		} finally

		{
			System.out.println("写入成功!");
			if (out != null) {
				try {
					out.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}

四、内部类的调用

1.创建内部类:

public class ClassA {
	public String test(){
		return "我是A类";
	}
	class ClassB{
		public void test(){
			System.out.println("我是内部类中的方法");
		}
	}
}

2.调用:

public class OutPutInnerClass extends ClassA.ClassB{
	/*
	 * 继承内部类
	 * 当某个类继承内部类时,必须给这个类一个带参数的构造方法,并且该构造方法的参数为需要继承内部类的外部类的引用
	 * 同时在构造方法中使用外部类对象.super();
	 */
	public OutPutInnerClass(ClassA a){
		a.super();
	}
	public static void main(String[] args){
		ClassA a=new ClassA();
		OutPutInnerClass oic=new OutPutInnerClass(a);
		oic.test();
		
		匿名内部类的试用
		showInfo(new ClassA(){});
	}
	public static void showInfo(ClassA a){
		System.out.println("调用匿名内部类:"+a.test());
	}
}

五、读取txt文件中的内容

public static void main(String[] args) {
		FileReader fr;
		try {
			fr = new FileReader(new File("D:\\file.txt"));
			// 初始化输出流
			BufferedReader br = new BufferedReader(fr);// 初始化输出字符流
			String n = null;
			while ((n = br.readLine()) != null) {// 这里读取一行,是按回车算的
				System.out.println(n);

			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

六、复制大于60M的文件

/**
	 * @param args
	 * 流FileInputStream和FileOutputStream
	 * 复制大于60m的文件,因为byte[]最大存储64m的文件,所以要分着读写
	 */
	public static void main(String[] args) {
		try {
			File inFile = new File("H:\\Users/YANTAI_DB_20141202.DMP");
			File outFile = new File("H:\\ddd.dmp");
			// 最大的流为60Mb,当文件的容量大于60Mb的时候便分开流
			final int MAX_BYTE = 61440000;
			long streamTotal = 0; // 接受流的容量
			int streamNum = 0; // 流需要分开的数量
			int leave = 0; // 文件剩下的字符数
			byte[] inOutb; // byte数组接受文件的数据
			// 创建流文件读入与写出类
			FileInputStream inStream = new FileInputStream(inFile);
			FileOutputStream outStream = new FileOutputStream(outFile);
			// 通过available方法取得流的最大字符数
			streamTotal = inStream.available();
			// 取得流文件需要分开的数量
			streamNum = (int) Math.floor(streamTotal / MAX_BYTE);
			// 分开文件之后,剩余的数量
			leave = (int) streamTotal % MAX_BYTE;
			// 文件的容量大于60Mb时进入循环
			if (streamNum > 0) {
				for (int i = 0; i < streamNum; ++i) {
					inOutb = new byte[MAX_BYTE];
					// 读入流,保存在byte数组
					inStream.read(inOutb, 0, MAX_BYTE);
					outStream.write(inOutb); // 写出流
					outStream.flush(); // 更新写出的结果
				}
			}
			// 写出剩下的流数据
			inOutb = new byte[leave];
			inStream.read(inOutb, 0, leave);
			outStream.write(inOutb);
			outStream.flush();
			inStream.close();
			outStream.close();
			System.out.println("复制完成");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}