.程序小白,希望和大家多交流,共同学习
17.10_1
//划分文件,按照制定个数创建文件,并源文件等分的放在各个文件中
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
public class DivideFile
{
public static void main(String[] args) throws IOException
{
if (args.length != 2)
{
System.out.println("Usage: java DivideFile sourceFile numberOfPieces");
}
try
{
File source = new File(args[0]);
FileInputStream input = new FileInputStream(source);
int number = Integer.parseInt(args[1]);
if (source.exists())
{
long totalSize = source.length();
System.out.println(totalSize);
long pieceSize = totalSize / number;
System.out.println(pieceSize);
long endSize = 0;
long count = 0;
for (int i = 1; i < number; i++)
{
endSize = i * pieceSize;
FileOutputStream output = new FileOutputStream("SourceFile." + i);
while (count < endSize)
{
output.write(input.read());
count++;
//System.out.println(count);
}
}
FileOutputStream output1 = new FileOutputStream("SourceFile." + number);
while (count <= totalSize)
{
output1.write(input.read());
count++;
}
}
}
catch (IOException ex)
{
System.out.println(ex);
}
}
}
//java DivideFile DivideFile.java 12
17.10_2
//有时候自己的思路会被自己的认识局限住
//看看别人的代码,可能会给你不一样的新鲜
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class DivideFile2
{
public static void main(String[] args)
{
if (args.length != 2)
{
System.out.println("Useage : java DivideFile2 sourceFile numberOfPieces");
}
else
{
long start = System.currentTimeMillis();
String fileName = args[0];
int number = Integer.parseInt(args[1]);
try
{
splitFile(fileName, number);
}
catch (IOException ex)
{
System.out.println(ex);
}
long finish = System.currentTimeMillis();
System.out.println((finish - start) + "Millis");
}
}
//将源文件分装在指定个数的文件中
public static void splitFile(String fileName, int number) throws IOException
{
File file = new File(fileName);
if (!file.exists())
{
throw new IOException("file not exist");
}
FileInputStream input = new FileInputStream(file);
FileOutputStream output = null;//初始化为null,因为需要创建很多的文件
long length = file.length();//文件的总长度
System.out.println(length);
int everySize = (int)(length / number + 0.5);//每个文件的存储量,向上取整,Math.ceil();
System.out.println(everySize);
byte[] size = new byte[everySize];//每次读取文件指定大小
for (int i = 0; i < number; i++)
{
output = new FileOutputStream("newSourceFile." + i);
input.read(size);//读取存储的字节
output.write(size);//向文件中写入读到的字节
output.close();//每次都为新创建的文件创建输出流,每次写完文件,就将输出流关闭
}
input.close();
}
}
//java DivideFile2 huishenghuiyingx10_64bit_wmqm.exe 2
//这个文件有1.09G,如果存在一个文件中,用记事本根本就打不开。
//然后将此文件分装在5个文件中,使用记事本打开仍然很卡
//百度中介绍一个记事本文件可以打开1G的文件,但是我将此文件分装在
//两个文件中每个587713048K,使用记事本仍然打不开
17.11
//划分文件的GUI版本
import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.control.Button;
import javafx.scene.paint.Color;
import javafx.scene.layout.VBox;
import javafx.scene.layout.GridPane;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class DivideFileGUI extends Application
{
private TextField tfFile = new TextField();
private TextField tfNumber = new TextField();
private Button btStart = new Button("Start");
private Label result = new Label("get ready");
@Override
public void start(Stage primaryStage)
{
//主面板
VBox pane = new VBox(10);
pane.setPadding(new Insets(10, 10, 10, 10));
pane.setAlignment(Pos.CENTER);
//放文本框内容的面板
GridPane gbPane = new GridPane();
gbPane.setHgap(10);
gbPane.setVgap(10);
//添加文本框
tfFile.setAlignment(Pos.BOTTOM_LEFT);
tfNumber.setAlignment(Pos.BOTTOM_LEFT);
gbPane.add(new Label("Enter a file: "), 0, 0);
gbPane.add(tfFile, 1, 0);
gbPane.add(new Label("Specify the number of smaller files: "), 0, 1);
gbPane.add(tfNumber, 1, 1);
result.setTextFill(Color.RED);
result.setStyle("-fx-underline: true");
//添加至主面板
pane.getChildren().addAll(new Label("If you split a file named temp.txt into 3 smaller files\n" +
"the three smaller files are temp.txt.1, temp.txt.2 and temp.txt.3."),
gbPane, btStart, result);
//功能实现
btStart.setOnAction(e -> {
if (!tfFile.getText().equals("") && !tfNumber.getText().equals(""))
{
result.setText("Lodding");
long start = System.currentTimeMillis();
String fileName = tfFile.getText();
int number = Integer.parseInt(tfNumber.getText());
try
{
splitFile(fileName, number);
}
catch (IOException ex)
{
System.out.println(ex);
}
long finish = System.currentTimeMillis();
result.setText((finish - start) + " Millis");
}
else
result.setText("TextFields can't be empty.");
});
Scene scene = new Scene(pane);
primaryStage.setTitle("DivideFile");
primaryStage.setScene(scene);
primaryStage.show();
}
//将源文件分装在指定个数的文件中
public static void splitFile(String filePath, int number) throws IOException
{
File file = new File(filePath);
if (!file.exists())
{
throw new IOException("file not exist");
}
FileInputStream input = new FileInputStream(file);
FileOutputStream output = null;//初始化为null,因为需要创建很多的文件
long length = file.length();//文件的总长度
System.out.println(length);
int everySize = (int)(length / number + 0.5);//每个文件的存储量,向上取整,Math.ceil();
System.out.println(everySize);
byte[] size = new byte[everySize];//每次读取文件指定大小
for (int i = 0; i < number; i++)
{
output = new FileOutputStream("newSourceFile." + i);
input.read(size);//读取存储的字节
output.write(size);//向文件中写入读到的字节
output.close();//每次都为新创建的文件创建输出流,每次写完文件,就将输出流关闭
}
input.close();
}
public static void main(String[] args)
{
Application.launch(args);
}
}