Java创建临时文件,删除特定字符串并重命名为原始文件

时间:2016-04-29 10:34:44

标签: java file text

正如主题所述,我试图获取一个特定的字符串,该字符串通常是自动生成到同一个字符串中,并且它似乎有效,因为创建了临时文件并且字符串被替换为“”但它似乎存在IOException在删除时重命名为原文时,请帮忙吗?

import java.io.*;
import java.util.Scanner;

/**
 * Main class to test the Road and Settlement classes
 * 
 * @author Chris Loftus (add your name and change version number/date)
 * @version 1.0 (24th February 2016)
 *
 */
public class Application {

    private Scanner scan;
    private Map map;
    private static int setting;

    public Application() {
        scan = new Scanner(System.in);
        map = new Map();
    }

    private void runMenu() {
        setting = scan.nextInt();
        scan.nextLine();

    }

    // STEP 1: ADD PRIVATE UTILITY MENTHODS HERE. askForRoadClassifier, save and
    // load provided

    private Classification askForRoadClassifier() {
        Classification result = null;
        boolean valid;
        do {
            valid = false;
            System.out.print("Enter a road classification: ");
            for (Classification cls : Classification.values()) {
                System.out.print(cls + " ");
            }
            String choice = scan.nextLine().toUpperCase();
            try {
                result = Classification.valueOf(choice);
                valid = true;
            } catch (IllegalArgumentException iae) {
                System.out.println(choice + " is not one of the options. Try again.");
            }
        } while (!valid);
        return result;
    }

    private void deleteSettlement() {

        String name;
        int p;
        SettlementType newSetK = SettlementType.CITY;
        int set;
        System.out.println("Please type in the name of the settlement");
        name = scan.nextLine();
        System.out.println("Please type in the population of the settlment");
        p = scan.nextInt();
        scan.nextLine();
        System.out.println("Please type in the number of the type of settlement .");
        System.out.println("1: Hamlet");
        System.out.println("2: Village");
        System.out.println("3: Town");
        System.out.println("4: City");
        set = scan.nextInt();
        scan.nextLine();

        if (set == 1) {
            newSetK = SettlementType.HAMLET;
        }

        if (set == 2) {
            newSetK = SettlementType.VILLAGE;
        }

        if (set == 3) {
            newSetK = SettlementType.TOWN;
        }

        if (set == 4) {
            newSetK = SettlementType.CITY;
        }

        String generatedResult = "Name: " + name + " Population: " + p + " SettlementType " + newSetK;

        String status = searchAndDestroy(generatedResult);
    }

    private String searchAndDestroy(String delete) {
        File file = new File("C:\\Users\\Pikachu\\workspace\\MiniAssignment2\\settlements.txt");

        try {
            File temp = File.createTempFile("settlement", ".txt", file.getParentFile());

            String charset = "UTF-8";

            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charset));

                PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(temp), charset));

                for (String line; (line = reader.readLine()) != null;) {
                    line = line.replace(delete, "");
                    writer.println(line);

                }
                System.out.println("Deletion complete");
                    reader.close();
                    writer.close();
                file.delete();
                temp.renameTo(file);
            } 



            catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                System.out.println("Sorry! Can't do that! 1");
            }

            catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                System.out.println("Sorry! Can't do that! 2");
            }


        } 

        catch (IOException e) {
            // TODO Auto-generated catch block
            System.out.println("Sorry! Can't do that! , IO Exception error incurred 3");
        }


        return null;
    }

    private void save() {
        map.save();
    }

    private void load() {
        map.load();
    }

    public void addSettlement() {
        String name;
        int p;
        SettlementType newSetK = SettlementType.CITY;
        int set;
        System.out.println("Please type in the name of the settlement");
        name = scan.nextLine();
        System.out.println("Please type in the population of the settlment");
        p = scan.nextInt();
        scan.nextLine();
        System.out.println("Please type in the number of the type of settlement .");
        System.out.println("1: Hamlet");
        System.out.println("2: Village");
        System.out.println("3: Town");
        System.out.println("4: City");
        set = scan.nextInt();
        scan.nextLine();

        if (set == 1) {
            newSetK = SettlementType.HAMLET;
        }

        if (set == 2) {
            newSetK = SettlementType.VILLAGE;
        }

        if (set == 3) {
            newSetK = SettlementType.TOWN;
        }

        if (set == 4) {
            newSetK = SettlementType.CITY;
        }

        new Settlement(name, newSetK, p);
    }

    private void printMenu() {
        System.out.println("Please type in the number of the action that you would like to perform");
        System.out.println("1: Create Settlement");
        System.out.println("2: Delete Settlement");
        System.out.println("3: Create Road");
        System.out.println("4: Delete Road");
        System.out.println("5:Display Map");
        System.out.println("6:Save Map");
    }

    public static void main(String args[]) {
        Application app = new Application();

        app.printMenu();
        app.runMenu();
        System.out.println(setting);
        if (setting == 1) {
            app.addSettlement();
        }

        if (setting == 2) {
            app.deleteSettlement();
        }
        app.load();
        app.runMenu();
        app.save();
    }

}

1 个答案:

答案 0 :(得分:0)

我检查了它是否可删除(file.delete抛出一个布尔异常)所以我尝试直接通过windows删除它,显然它被java使用,所以我假设黯然失色,关闭并再次启动eclipse后就可以了。 ......好吧......那是相当反高潮的......非常感谢你们的讨论,如果不是为了讨论,我绝对不会想到它:D< 3你们都在我心中