2012-11-29 90 views
2

我們有一個Java程序,它從.xml文件中提取信息,將其轉換爲字符串,然後將該字符串寫入.txt文件。該文件然後附加到第二個.txt文件,該文件將保存來自多個.xml文件的所有輸入。在Mac上的Eclipse中,該程序正確地將所有.xml代碼附加到最終的.txt文件中。在Mac上輸出正確,但在Windows上不正確

但是,當在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(); 
    } 

} 
+0

所有的文件都在正確的目錄中嗎? – Ivan

+0

你檢查了文件權限嗎? –

回答

0

看沖洗的BufferedWriter。緩衝,因爲它由底層操作系統控制,因此平臺有所不同。