Java基础(五)(IO流,线程)

IO流

java.io.File

1)创建File对象: new File(文件或目录路径字符串);  new File(父目录 , 文件或目录名);

2)文件目录属性:

      canRead(); canWrite(); canExecute(); exists(); getName(); getPath(); getParent(); getParentFile();

      isDirectory(); isFile(); isHidden(); lastModify(); length() 文件的字节量; 

      creatNewFile(); 创建文件,文件所在目录如果不存在,会出现异常

      createTempFIle(前缀 , 后缀); 在系统临时目录中创建临时文件

      delete();  删除文件或目录,对目录来说,只能删除空目录

      mkdir(); 创建目录,返回boolean表示是否创建成功

      mkdirs(); 创建多层目录,返回boolean 表示是否创建成功

      renameTo( File ); 重命名,返回 boolean 表示是否成功

3)目录列表方法:

      list(); 返回文件名称数组String[ ]

      listFiles(); 返回文件对象数组 File[ ]

      使用过滤器对文件列表进行过滤

     list(FilenameFilter); listFiles(FilenameFilter); listFiles(FileFilter);

      java.io.RandomAccessFile

文件读写工具,一般用于读写具有固定直接格式的文件,把文件看成是一个大型的字节数组。

new RandomAccessFile( File/FilePath , mode);  mode: "r"  "rw"  "rws"  "rwd"

方法:

      length(); 获得文件字节量

      seek(索引位置);

      getFilePointer(); 获得当前指针位置

      read(); 读取一个字节,前面补3个0字节,作int类型返回

      read(byte[ ]); 每次读取多个字节,放入指定数组,并返回这次读取的字节数量

      read(byte[ ] , 起始位置 , 最多读取个数);

      readInt(); 读取4个字节,作整数类型返回

      readDouble();

      readUTF(); 先读前两个字节,确定字节量,然后按字节量读取字符串

      write(int);将整数前三个字节不要,写出最后一个字节;

      writeInt(); 将int的四个字节写出

      writeDouble();

      writeUTF(); 先写两个字节表示字符串的字节量,再将表示字符串的字节写出

bmp图形:前54个字节,是bmp格式头。第19 - 22字节表示宽度,第23 - 26字节表示高度

java.io.InputStream

java.io.OutputStream

   FileOutputStream

   BufferedOutputStram;提供内存缓冲区,提高读写效率。默认缓冲区8k,可通过构造方法指定大小

   DataOutputStream;以字节方式读写数据,用于读写有固定格式的文件,方法与RandomAccess相同

   ByteArrayOutputStream

   PrintStream;将任何数据作为字符串输出


线程:

两种方式:继承Tread类,实现Rannable接口

方法:Thread.currentThread(); 获得正在执行此行代码的线程,获得当前线程

Thread.yield(); 放弃执行,让给其它线程执行

   Thread.sleep(毫秒值); 当前线程在此处暂停指定的时长

   getPriority(); setPriority(); 设置线程优先级[1 , 10],默认5,不要设置过高或过低的优先级

   interrupt(); 打断一个线程对象的休息

   isDaemon(); setDaemon(true); 将线程设置为Daemon线程:后台线程

   join(); 将另一线程加入到当前线程中,等待另一线程结束后,当前线程再继续,一般用于等待另一线程的     运算结果

   isAlive(); 判断是否是活动线程,start后,dead前

线程结束:不能用stop()方法,应该自己用逻辑控制线程结束,控制run方法结束,return ,throw

synchronized:

      同步关键字控制同步锁;一个线程执行同步快内的代码时,必须获得同步锁才能执行

synchronized代码块:线程安全,多个线程访问同一个数据时不会发生访问冲突,不会发生脏读。

wait(); 当前线程在调用的对象上等待,直到收到通知后继续执行;

wait(毫秒);

notify(); 通知一个等待的线程;

notifyAll(); 通知所有等待的线程

使用等待,通知,必须踩同步块内,wait和sleep区别:wait释放锁,sleep不释放锁

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.os.Environment;

public class FileUtil {

	private String SDPATH;
	String PACKAGE_NAME = "com.kuukaa.kxeg";
	public String DATABASE_PATH = "/data/data/" + PACKAGE_NAME;

	public String getSDPATH() {
		return SDPATH;
	}

	public FileUtil() {
		SDPATH = Environment.getExternalStorageDirectory() + "/";
		System.out.println(SDPATH);
	}

	public File[] getPathFiles(String path) {
		File f = new File(getSDPATH() + path);
		return f.listFiles();
	}

	public File createSDFile(String filename) throws IOException {
		File f = new File(getSDPATH() + filename);
		f.createNewFile();
		return f;
	}

	public boolean deleteSDFile(String filename) throws IOException {
		File f = new File(getSDPATH() + filename);
		return f.delete();
	}

	public File createSDDir(String dir) throws IOException {
		File d = new File(getSDPATH() + dir);
		if (!d.isDirectory())
			d.mkdir();
		return d;
	}

	public void createSDDirs(String dir) throws IOException {

		String[] dirs = dir.split("/");
		String temp = "";
		for (int i = 0; i < dirs.length; i++) {
			if (dirs[i] != null && dirs[i].length() > 0) {
				temp += "/" + dirs[i];
				createSDDir(temp);
			}
		}

	}

	public boolean isFileExist(String filename) {
		File f = new File(getSDPATH() + filename);
		return f.exists();
	}

	public boolean isFileExistPath(String filename) {
		File f = new File(filename);
		return f.exists();
	}

	//	public File write2SDFromInput(String path, String filename, String input) throws IOException {
	//		File file = null;
	//		OutputStream out = null;
	//
	//		try {
	//
	//			createSDDirs(path);
	//			file = createSDFile(path + "/" + filename);
	//
	//			out = new FileOutputStream(file);
	//
	//			OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(file), "UTF-8");
	//			BufferedWriter writer = new BufferedWriter(write);
	//			//PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(filePathAndName)));
	//			//PrintWriter writer = new PrintWriter(new FileWriter(filePathAndName));
	//
	//			writer.write(input);
	//			writer.close();
	//
	//		} catch (FileNotFoundException e) {
	//			throw e;
	//		} catch (IOException e) {
	//			throw e;
	//		} /*finally{
	//			try {
	//				out.close();
	//			} catch (IOException e) {
	//				throw e;
	//			}
	//			}*/
	//
	//		return file;
	//	}

	/**
	 * 将一个InputStream里面的数据写入到SD卡中
	 */
	public File writeToSDFromInput(String path, String fileName, InputStream input) {

		File file = null;
		OutputStream output = null;
		try {
			createSDDir(path);
			file = createSDFile(path + fileName);
			output = new FileOutputStream(file);
			byte buffer[] = new byte[1024];
			int len = 0;
			//如果下载成功就开往SD卡里些数据
			while ((len = input.read(buffer)) != -1) {
				output.write(buffer, 0, len);
			}
			output.flush();
		} catch (Exception e) {
			e.printStackTrace();
		} finally {

			try {
				input.close();
				output.close();
			} catch (Exception e) {

				e.printStackTrace();
			}
		}
		return file;
	}

	public String reader2Str(String path, String filename) throws FileNotFoundException, IOException, UnsupportedEncodingException {
		StringBuffer sb = new StringBuffer();
		InputStreamReader isr;
		try {
			isr = new InputStreamReader(new FileInputStream(new File(getSDPATH() + path + "/" + filename)), "GBK");
			BufferedReader br = new BufferedReader(isr);
			String str = "";
			while ((str = br.readLine()) != null) {
				sb.append(str);
			}
		} catch (UnsupportedEncodingException e) {
			throw e;
		} catch (FileNotFoundException e) {
			throw e;
		} catch (IOException e) {
			throw e;
		}

		return sb.toString();
	}

	public List reader2List(String path, String filename) throws FileNotFoundException, IOException, UnsupportedEncodingException {
		List<String> sb = new ArrayList();

		if (sb != null && sb.size() > 0)
			return sb;

		InputStreamReader isr;
		try {
			isr = new InputStreamReader(new FileInputStream(new File(getSDPATH() + path + "/" + filename)), "GBK");
			BufferedReader br = new BufferedReader(isr);
			String str = "";
			while ((str = br.readLine()) != null) {
				sb.add(str.trim());
			}
		} catch (UnsupportedEncodingException e) {
			throw e;
		} catch (FileNotFoundException e) {
			throw e;
		} catch (IOException e) {
			throw e;
		}

		return sb;
	}

	public File createDATADir(String dir) throws IOException {
		File d = new File(DATABASE_PATH + "/" + dir);
		if (!d.exists())
			d.mkdir();
		return d;
	}

	public void savetext(Context con) {
		try {
			FileOutputStream outStream = con.openFileOutput(DATABASE_PATH + "/zip/a.txt", Context.MODE_WORLD_READABLE);
			outStream.write("asdf".getBytes());
			outStream.close();
		} catch (FileNotFoundException e) {
			return;
		} catch (IOException e) {
			return;
		}
	}

	public void loadtext(Context con) {
		try {
			FileInputStream inStream = con.openFileInput(DATABASE_PATH + "/zip/a.txt");
			ByteArrayOutputStream stream = new ByteArrayOutputStream();
			byte[] buffer = new byte[1024];
			int length = -1;
			while ((length = inStream.read(buffer)) != -1) {
				stream.write(buffer, 0, length);
			}
			stream.close();
			inStream.close();
			System.out.println(stream);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			return;
		}
	}

}

public static String readFromSDcard(String fileName) {
		String fileContent = "";
		try {
			File f = new File("/mnt/sdcard/" + fileName);
			if (f.isFile() && f.exists()) {
				InputStreamReader read = new InputStreamReader(
						new FileInputStream(f), "gbk");
				BufferedReader reader = new BufferedReader(read);
				String line;
				while ((line = reader.readLine()) != null) {
					fileContent += line;
				}
				read.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return fileContent;
	}

	/* 写入到文件 */
	public static void writeFile(String fileName, String fileContent) {
		try {
			File f = new File(fileName);
			if (!f.exists()) {
				f.createNewFile();
			}
			OutputStreamWriter write = new OutputStreamWriter(
					new FileOutputStream(f), "gbk");
			BufferedWriter writer = new BufferedWriter(write);
			writer.write(fileContent);
			writer.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}




     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值