最近接到了文件上传和下载的小需求,故整理了下java文件操作的一些方法。
1、往指定路径的文件写入110万行字符串
/**
* 写入TXT文件
*/
public static void writeFile() {
try {
File writeName = new File("E:\\home\\mobile.txt"); //文件路径
writeName.createNewFile(); // 创建新文件,有同名的文件的话直接覆盖
FileWriter writer = new FileWriter(writeName);
BufferedWriter out = new BufferedWriter(writer);
for (int i = 1; i <= 1100000; i++) {
out.write("qwertyuioplmknjbhvgcfxdzsa\r\n"); // \r\n即为换行
if (i % 10000 == 0) ;
out.flush(); // 把缓存区内容压入文件
}
out.flush(); // 把缓存区内容压入文件
} catch (IOException e) {
e.printStackTrace();
}
}
2、上传和下载文件,一次性读取到内存和一次性写入
public static void main(String[] args) throws IOException {
//读文件到内存
InputStream in = new FileInputStream("F:\\mobileSmall1.txt");
byte[] buffer = new byte[in.available()];
in.read(buffer); //一次性将文件二进制流读入
//从内存到硬盘
OutputStream out = new FileOutputStream("D:\\destination.txt");
out.write(buffer);
out.close();
in.close();
}
3、每次读取固定大小的文件到内存并写入文件
public static void main(String[] args) throws IOException {
//读文件到内存
InputStream in = new FileInputStream("F:\\mobileSmall1.txt");
byte[] buffer = new byte[1024 * 1024 * 10];//每次10M
OutputStream out = new FileOutputStream("D:\\destination.txt");
while (in.read(buffer) != -1) {
out.write(buffer);
out.flush();
}
//从内存到硬盘
out.close();
in.close();
}
4、按行读取文件
public static void upload() throws IOException {
InputStream in = new FileInputStream("f:\\lys455558.txt");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in));
String lines;
long rows=0l; //统计文件行数
OutputStream out = new FileOutputStream("D:\\destination.txt");
while ((lines = bufferedReader.readLine()) != null) {
rows++;
if (lines.startsWith("")) { //取出空行
System.out.println(lines);
out.write(lines.getBytes() );
out.flush();
}
}
System.out.println("文件行数:"+rows);
}
6、统计文件行数
public static void count() throws IOException {
long rows=0;
InputStream in = new FileInputStream("F:\\mobileSmall1.txt");
if(in.available()>0){
LineNumberReader lineNumberReader = new LineNumberReader(new InputStreamReader(in));
lineNumberReader.skip(in.available());//跳到行末
rows = lineNumberReader.getLineNumber() + 1; //取当前行号并加1
}
System.out.println("文件行数:"+rows);
}
7、字符串转输入流(String to inputstream)
String Result="今天不下雨!";
InputStream inputStream = new ByteArrayInputStream(Result.getBytes(Charset.forName("UTF-8")));