【Java基础三】InputStream获取文件并保存

    最近在项目的开发过程中,有这样的一个需求:通过上游传送一个路径,通过文件获取的方式将其存取到自己想存取的地方,传送文件的类型不定,有可能是PDF,有可能是txt等。

构建代码思路:通过inputStream获取,再将其转换存入本地。

遇到问题:类型不同该如何存储?

---解决办法:通过截取路径字符串的方式将获取的文件名称截图直接存储。这样就会避免存储类型的单一化。

具体代码:

public static void main(String[] args) throws IOException {
		// 通过url获取文件
		// File f = new File("D:/20160603143324235166.pdf");
		File f = new File("D:/hello.docx");
		// 获取的文件路径
		// String url = "D:/20160603143324235166.pdf";
		String url = "D:/hello.docx";
		// 取得最后一个/的下标
		int index = url.lastIndexOf("/");
		// 返回字符串,截取最后方的文件的名称类型
		String newString = url.substring(index + 1);
		// 通过inputStream获取文件
		InputStream inputStream = new FileInputStream(f);
		// 定义一个文件名字进行接收获取文件
		FileOutputStream fileOut = new FileOutputStream(new File("F:\\" + newString));
		byte[] buf = new byte[1024 * 8];
		while (true) {
			int read = 0;
			if (inputStream != null) {
				read = inputStream.read(buf);
			}
			if (read == -1) {
				break;
			}
			fileOut.write(buf, 0, read);
		}
		// 查看文件获取是否成功
		if (fileOut.getFD().valid() == true) {
			System.out.println("获取文件保存成功");
		} else {
			System.out.println("获取文件失败");
		}
		fileOut.flush();
	}
主要就是分为两部分,获取文件,截图url文件名称。对于截图字符串,除上述一种方式之外,还可以考虑其他的方式:

方式二:截图最后"/"之后,转换成数组,通过string的copyValueOf去获取

	public static void main(String[] args) {
		String url = "D:/hello.docx";
		  //取得最后一个/的下标
		  int index = url.lastIndexOf("/");
		  //将字符串转为字符数组
		  char[] ch = url.toCharArray();
		  //根据 copyValueOf(char[] data, int offset, int count) 取得最后一个字符串
		  String lastString = String.copyValueOf(ch, index + 1, ch.length - index - 1);
		  System.out.println(lastString);
	}
    因为需求很简单,只是为了起到保存的功能,方便下一个功能的调用。待需求复杂之后可以再考虑更优化的方式。通过基础去获取思想……

posted on 2016-06-18 10:27  huohuoL  阅读(1012)  评论(0编辑  收藏  举报

导航