在Mac上输出正确,但在Windows上输出不正确

时间:2012-11-29 19:47:02

标签: java eclipse

我们有一个Java程序,它从.xml文件中提取信息,将其转换为字符串,然后将该字符串写入.txt文件。然后将该文件附加到第二个.txt文件,该文件将保存来自多个.xml文件的所有输入。在Mac上的Eclipse中,程序正确地将所有.xml代码附加到最终的.txt文件中。

但是,当在Eclipse中的Windows计算机上运行相同的Java程序时,最终的.txt文件不会像在Mac上那样收集所有输入。在Windows与Mac上读取/写入文件是否存在已知差异?特别是当最初在Mac上编写的代码被转移到Windows机器上时?

这是我们的代码:

package edu.uci.ics.jung.samples;

import java.io.FileWriter;
import java.io.BufferedWriter;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;
import java.util.Scanner;

public class ReadXMLFile1 {

    public static void main(String argv[]) throws IOException { //throws ioexception allows the filewriter code below (specifically writing the "t# b" title)
          //while loop to grab all xml files in the form of name0, name1, name2, etc and perform txt file conversion
         int numberofgraphs=10; //indicate number of graphs importing/reading/appending
         int x=0;
         int b = 0;
          while (x < numberofgraphs){
                FileWriter pagetowrite = new FileWriter("graphtotal1.txt", true); //true says to append string "scannedstuff" to graphtotal.txt (graphtotal.txt can be replaced by any file in visualization folder, you name it!)
                BufferedWriter now = new BufferedWriter(pagetowrite); //more advanced file writer, included in order to use newLine() method below
                now.write("t# "+b); //writes the title t# "b" at top of each graph set
                now.newLine(); //returns to next line of file (helps keep format of original .txt)
                now.close(); //ends file writing for that line of text file



              try {

                  String xmlname = ("Untitled"+b+".xml");

                  File fXmlFile = new File(xmlname);
                  DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
                  DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
                  Document doc = dBuilder.parse(fXmlFile);
                  doc.getDocumentElement().normalize();


                  NodeList oList = doc.getElementsByTagName("node"); //writing to txt file the node info
                  for (int temp = 0; temp < oList.getLength(); temp++) {

                       Node oNode = oList.item(temp);
                       if (oNode.getNodeType() == Node.ELEMENT_NODE) {

                          Element fElement = (Element) oNode;

                          String nodename = getTagValue("name", fElement);
                          char nodenumber = nodename.charAt( 1 );
                          String nodelabel = getTagValue("string", fElement);

                          FileWriter pagetowriteon = new FileWriter("newinput1.txt", true); //true says to append string "scannedstuff" to newinput1.txt (newinput1.txt can be replaced by any file in visualization folder, you name it!)
                        BufferedWriter out = new BufferedWriter(pagetowriteon); //more advanced file writer, included in order to use newLine() method below
                        out.write("v"+ " "); //writes the letter v to indicate a node
                        out.write(nodenumber+" "); //writes number of node created
                        out.write(nodelabel); // writes the name of node..its label
                        out.newLine(); //returns to next line of file (helps keep format of original .txt)
                        out.close(); //ends file writing for that line of text file

                       }
                    }
                  NodeList nList = doc.getElementsByTagName("arc");//writing to txt file the arc info


                  for (int temp = 0; temp < nList.getLength(); temp++) {

                   Node nNode = nList.item(temp);
                   if (nNode.getNodeType() == Node.ELEMENT_NODE) {

                      Element eElement = (Element) nNode;


                      //String arcname = getTagValue("name", eElement);
                      String arcnode1 = getTagValue("From", eElement);
                      char node1 = arcnode1.charAt( 1 );
                      String arcnode2 = getTagValue("To", eElement);
                      char node2 = arcnode2.charAt( 1 );
                      String arclabel = getTagValue("string", eElement);

                      FileWriter pagetowriteon = new FileWriter("newinput1.txt", true); //true says to append string "scannedstuff" to newinput1.txt (newinput1.txt can be replaced by any file in visualization folder, you name it!)
                    BufferedWriter out = new BufferedWriter(pagetowriteon); //more advanced file writer, included in order to use newLine() method below
                    out.write("u"+ " "); //writes the letter u to indicate an edge
                    out.write(node1+" ");
                    out.write(node2+ " ");
                    out.write(arclabel);
                    out.newLine(); //returns to next line of file (helps keep format of original .txt)
                    out.close(); //ends file writing for that line of text file

                   }
                }
                //an option (mostly for individual graph use with simplegraphview...probably unecessary since simplegraph not used until after Data mining) to write to a newly named textfile so can run simplegraph view without having to change file name
                  File file = new File("newinput1.txt");

                //File (or directory) with new name (makes it easy to change one file name here instead of two in code above)
                  File file2 = new File("newinput.txt");
                  file.renameTo(file2);

                //this strategy of appending-> keep-> allows you to change one file name for giant append file..Filewriter line below ("graphtotal.txt")

                //start of appending text file
                 // boolean graphready;
              //assign if(boolean){ = to true when ready to append
                  if (true){
                    File file3 = new File ("newinput.txt"); //indicate which file
                    Scanner scan = new Scanner (file3); //read the text file indicated above
                            while (scan.hasNextLine()){ //will loop until no more lines of code detected; this loop reads and appends text to desired file
                                String scannedstuff3 = scan.nextLine(); //converts next line of code to a string
                                FileWriter pagetowriteon = new FileWriter("graphtotal.txt", true); //true says to append string "scannedstuff" to graphtotal.txt (graphtotal.txt can be replaced by any file in visualization folder, you name it!)
                                BufferedWriter out = new BufferedWriter(pagetowriteon); //more advanced file writer, included in order to use newLine() method below
                                //out.write("t# "+b); //writes the title t3 0 at top of each graph set
                                //out.newLine(); //returns to next line of file (helps keep format of original .txt)
                                out.write(scannedstuff3); //writes scanned line of code to new file indicated in FileWriter("desiredfile.txt", true)
                                out.newLine(); //returns to next line of file (helps keep format of original .txt)
                                out.close(); //ends file writing for that line of text file

                            }
                            scan.close(); //ends scanning of txt file indicated
                }

              } catch (Exception e) {
                e.printStackTrace();
              }
              x=x+1;
              b=b+1;


          }
    }






  private static String getTagValue(String sTag, Element eElement) {
    NodeList nlList = eElement.getElementsByTagName(sTag).item(0).getChildNodes();

        Node nValue = (Node) nlList.item(0);

    return nValue.getNodeValue();
  }

}

1 个答案:

答案 0 :(得分:0)

看看刷新BufferedWriter。缓冲,因为它由底层操作系统控制,因平台而异。