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

标签 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();
  }

}

最佳答案

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

关于java - 输出在 Mac 上正确,但在 Windows 上不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13633509/

相关文章:

在 TreeView 中拖动项目时,JavaFX OnMouseDragged 不会被触发

java - Hibernate 可以使用 MySQL 的 "ON DUPLICATE KEY UPDATE"语法吗?

java - 在IJavaProject中查找main方法

android - 连接 Android 设备后 Eclipse 调试 View 中的 NullPointerException

java - Java 中的对象数组有默认值吗?

java - 在 Linux 中不使用 sudo 查找进程名称

java - Eclipse 错误“此编译单元不在 Java 项目的构建路径上

android - 将 MuPDF 集成为库项目 (Android)

android - eclipse:Maven POM 文件在 "android"XML View 中打开

java - 从存储库访问 XML 文件时出现问题