⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ubbexport.java

📁 jive 2.1.1 的源码
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
        if (memberTotal.length > 0) {
            try {
                memberCount = Integer.parseInt(memberTotal[0]);
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }

        //Get forum info
        int forumCount = 0;
        File forumsFile = new File(ubbCGIDir, "forums.cgi");
        String [] forumData = fileToArray(forumsFile);
        forumCount = forumData.length;

        //Output number of users found to export and number of forums to export.
        String foundString = "Found " + forumCount + " forum";
        if (forumCount > 1) {
            foundString += "s";
        }
        foundString += " and " + memberCount + " member";
        if (memberCount > 1) {
            foundString += "s";
        }
        foundString += " to export.";
        println(foundString);

        println(" ");
        println("Enter the name of the file you'd like to write the data out to:");
        print("[" + fullFile + "] > ");
        String xmlName = readLine();
        if (xmlName.equals("")) {
            xmlName = fullFile;
        }
        fullFile = xmlName;
        boolean done = false;
        while (!done) {
            println(" ");
            println("Ready to begin export. Enter the number of the command you'd like to perform:");
            println(" (1) Proceed with export to file \"" + xmlName + "\".");
            println(" (2) Abandon export.");
            print("> ");
            String response = readLine();
            println(" ");
            try {
                int choice = Integer.parseInt(response);
                switch (choice) {
                    case 1:
                        println("Starting data export...");
                        //Output data to file.
                        //Write data as UTF-8 so that extended chars turn out correctly.
                        try {
                            Writer out = new UnicodeFilterWriter(
                                new BufferedWriter(
                                    new OutputStreamWriter(
                                        new FileOutputStream(xmlName),
                                        "UTF-8"),2097152));

                            out.write("<?xml version=\"1.0\"?>");
                            out.write("<!DOCTYPE Jive SYSTEM \"jive.dtd\">");
                            out.write("<Jive xmlversion=\"" + XML_VERSION + "\" exportDate=\"" +
                                    dateFormatter.format(new Date()) + "\">"
                            );

                            print("Exporting user data...");
                            int userCount = writeUserXML(memberDir, out);
                            out.flush();
                            println("\nFinished exporting " + userCount + " users.");

                            // Export all forums

                            out.write("<ForumList>");
                            for (int i=0; i<forumCount; i++) {
                                FullStringTokenizer tokens = new FullStringTokenizer(forumData[i],"|");
                                tokens.nextToken();
                                String forumName = tokens.nextToken();
                                String forumDescription = tokens.nextToken();
                                for (int j=0; j < 5; j++) {
                                    tokens.nextToken();
                                }
                                int forumID = Integer.parseInt(tokens.nextToken());
                                File forumDir = new File(ubbDir, "Forum" + forumID);
                                if( forumDir.exists() ) {
                                    println("Exporting data from " + forumDir.getAbsolutePath() );
                                    int messageCount = writeForumXML(forumDir, forumID, forumName, forumDescription, out);
                                    println("\nFinished exporting " + messageCount + " messages.\n");
                                }
                            }
                            out.write("</ForumList>");

                            out.write("</Jive>");
                            out.close();

                        }
                        catch(Exception e) {
                            e.printStackTrace();
                        }

                        done = true;
                        break;
                    case 2:
                        done = true;
                        break;
                     default:
                        println("ERROR - command not recognized. Please try again.");
                }
            }
            catch (NumberFormatException nfe) {
                println("ERROR - command not recognized. Please try again.");
            }
        }
    }

    public static void userExport() {
        File ubbCGIDir = getUbbCGIDirectory();
        File memberDir = new File(ubbCGIDir, "Members");

        File memberTotalFile = new File(memberDir, "membertotal.cgi");
        String [] memberTotal = fileToArray(memberTotalFile);
        if (memberTotal.length > 0) {
            println("Found " + memberTotal[0] + " members to export.");

            println(" ");
            println("Enter the name of the file you'd like to write the data out to:");
            print("[" + usersFile + "] > ");
            String xmlName = readLine();
            if (xmlName.equals("")) {
                xmlName = usersFile;
            }
            usersFile = xmlName;
            boolean done = false;
            while (!done) {
                println(" ");
                println("Ready to begin export. Enter the number of the command you'd like to perform:");
                println(" (1) Proceed with export to file \"" + xmlName + "\".");
                println(" (2) Abandon export.");
                print("> ");
                String response = readLine();
                println(" ");
                try {
                    int choice = Integer.parseInt(response);
                    switch (choice) {
                        case 1:
                            print("Starting user data export...");
                            //Output data to file.
                            try {
                                //Write data as UTF-8 so that extended chars turn out correctly.
                                BufferedWriter out = new BufferedWriter(
                                    new OutputStreamWriter(
                                        new FileOutputStream(xmlName),
                                        "UTF-8"
                                    )
                                );

                                out.write("<?xml version=\"1.0\"?>");
                                out.write("<!DOCTYPE Jive SYSTEM \"jive.dtd\">");
                                out.write("<Jive version=\"" + XML_VERSION + "\" exportDate=\"" +
                                        dateFormatter.format(new Date()) + "\">"
                                );

                                int userCount = writeUserXML(memberDir, out);

                                out.write("</Jive>");
                                out.close();
                                println("\nFinished exporting " + userCount + " users.");
                            }
                            catch (Exception e) {
                                e.printStackTrace();
                            }
                            done = true;
                            break;
                        case 2:
                            done = true;
                            break;
                        default:
                            println("ERROR - command not recognized. Please try again.");
                    }
                }
                catch (NumberFormatException nfe) {
                    println("ERROR - command not recognized. Please try again.");
                }
            }
        }
        else {
            println("ERROR - the directory you entered exists but does not " +
                "contain information about UBB members. Try again.");
            userExport();
        }
    }

    /**
     * Gets the creation date for the specified forum. This date is determined
     * by the date of the first message posted in the forum.
     */
    private static Date getForumCreationDate( File forumDir, int forumNumber )
            throws IOException
    {
        println( "Getting creation date for forum " + forumNumber + "..." );

        Date creationDate = new Date();

        // Get the file which lists the threads in this forum
        File threadList = new File(forumDir, "forum" + forumNumber + ".threads");
        BufferedReader listIn = new BufferedReader(new FileReader(threadList));

        String threadLine = null;
        boolean validDate = false;

        // Loop through the list of threads until
        //  1) there are no more threads to examine or
        //  2) we've found a valid creation date
        while ( ((threadLine = listIn.readLine()) != null) && !validDate ) {
            FullStringTokenizer tokens = new FullStringTokenizer(threadLine, "|^|");
            tokens.nextToken();
            String firstThreadID = tokens.nextToken();

            File firstThreadFile = new File( forumDir, firstThreadID+".cgi" );
            BufferedReader messages = new BufferedReader(
                new FileReader(firstThreadFile)
            );
            messages.readLine(); // skip first line
            String rootMessage = messages.readLine();
            if( rootMessage != null ) {
                FullStringTokenizer mTokens = new FullStringTokenizer(rootMessage,"||");
                // skip the first 3 tokens
                mTokens.nextToken(); mTokens.nextToken(); mTokens.nextToken();
                String date = mTokens.nextToken();
                date += " " + mTokens.nextToken();
                try {
                    creationDate = ubbMessageDateFormatter.parse(date);
                } catch( ParseException e ) {
                    System.err.println("(getForumCreationDate): unparseable date: " + date);
                }
                // found a good date, get out of this loop
                validDate = true;
            }
            messages.close();
        }
        listIn.close();

        return creationDate;
    }

    private static Date getGregorianDate( double julianDate ) {

        double l = julianDate + 68569.0;
        double n = ( 4.0 * l ) / 146097.0;
        l = l - ( ((146097.0*n)+3.0)/4.0);
        double i = (4000.0 * (l+1.0))/1461001.0;
        l = l - ((1461.0*i)/4.0) + 31.0;
        double j = (80.0 * l) / 2447.0;
        double d = l - ((2447.0*j)/80.0);
        l = j/11.0;
        double m = j + 2.0 - (12.0*l);
        double y = 100.0 * (n-49.0) + i + l;

        System.err.println("\n");
        System.err.println("l: " + l);
        System.err.println("n: " + n);
        System.err.println("i: " + i);
        System.err.println("j: " + j);
        System.err.println("d: " + d);
        System.err.println("m: " + m);
        System.err.println("y: " + y);

        return new Date();

//        l = jd + 68569
//        n = ( 4 * l ) / 146097
//        l = l - ( 146097 * n + 3 ) / 4
//        i = ( 4000 * ( l + 1 ) ) / 1461001
//        l = l - ( 1461 * i ) / 4 + 31
//        j = ( 80 * l ) / 2447
//        d = l - ( 2447 * j ) / 80
//        l = j / 11
//        m = j + 2 - ( 12 * l )
//        y = 100 * ( n - 49 ) + i + l
    }

    private static Date getForumModifiedDate( File forumDir, int forumNumber )
            throws IOException
    {
        println( "Getting modified date for forum " + forumNumber + "..." );

        // The modified date of this forum. Initialize it to now, although it
        // will be changed when the correct modified date is found.
        Date forumModifiedDate = new Date();
        // Load the forumX.threads file. This file is a listing of threads ordered
        // from oldest to newest modified.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -