Java语言程序设计 第十七章 (17.10、17.11)

.程序小白,希望和大家多交流,共同学习
这里写图片描述
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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值