【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);
}
因为需求很简单,只是为了起到保存的功能,方便下一个功能的调用。待需求复杂之后可以再考虑更优化的方式。通过基础去获取思想……