Записать файл XML (используя XStream) в файловую систему Java - PullRequest
5 голосов
/ 02 декабря 2008

Мне нужно иметь возможность сериализовать строку и затем сохранить ее в файле .txt или .xml. Я никогда не использовал реализацию для чтения / записи файлов, просто помните, что я относительный новичок. Также мне нужно знать, как десериализовать строку, которая будет распечатана в терминале, как обычную строку.

Ответы [ 7 ]

5 голосов
/ 04 декабря 2008

XStream имеет средства для чтения и записи в файлы, см. Простые примеры (Writer.java и Reader.java) в этой статье .

4 голосов
/ 03 декабря 2008

Если вы можете сериализовать его в текстовый файл, просто откройте ObjectOutputStream и попросите его использовать собственную возможность сериализации String.

String str = "serialize me";
    String file = "file.txt";
    try{
        ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));
        out.writeObject(str);
        out.close();

        ObjectInputStream in = new ObjectInputStream(new FileInputStream(file));
        String newString = (String) in.readObject();
        assert str.equals(newString);
        System.out.println("Strings are equal");
    }catch(IOException ex){
        ex.printStackTrace();
    }catch(ClassNotFoundException ex){
        ex.printStackTrace();
    }

Вы также можете просто открыть PrintStream и откачать его таким образом, затем использовать BufferedReader и readLine (). Если вы действительно хотите получить фантазию (поскольку это все-таки задание HW), вы можете использовать цикл for и печатать каждый символ отдельно. Использование XML сложнее, чем нужно для сериализации String, а использование внешней библиотеки просто излишне.

3 голосов
/ 27 января 2009

Если вы начинаете Java, потратьте некоторое время на просмотр проекта Apache Commons. Существует множество базовых расширений Java, которые вы будете использовать много раз.

Я предполагаю, что вы просто хотите сохранить строку, чтобы вы могли прочитать ее позже - в этом случае это не обязательно должен быть XML.

Чтобы записать строку в файл, см. Org.apache.commons.io.FileUtils:

FileUtils.writeStringToFile(File file,String data)

Чтобы прочитать это обратно:

FileUtils.readFileToString(File file)

Ссылки:

http://commons.apache.org/

http://commons.apache.org/io

http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html

Убедитесь, что вы также посмотрите на commons-lang для множества хороших базовых вещей.

1 голос
/ 06 декабря 2008

Если вам нужно создать текстовый файл, содержащий XML, который представляет содержимое объекта (и сделать его двунаправленным), просто используйте JSON-lib:

class MyBean{  
   private String name = "json";  
   private int pojoId = 1;  
   private char[] options = new char[]{'a','f'};  
   private String func1 = "function(i){ return this.options[i]; }";  
   private JSONFunction func2 = new JSONFunction(new String[]{"i"},"return this.options[i];");  

   // getters & setters  
   ...  
}  

JSONObject jsonObject = JSONObject.fromObject( new MyBean() );
String xmlText = XMLSerializer.write( jsonObject );

Оттуда только что написал строку в ваш файл. Гораздо проще, чем все эти XML API. Однако теперь, если вам нужно соответствовать DTD или XSD, это плохой способ, так как он гораздо более свободный формат и соответствует только макету объекта.

http://json -lib.sourceforge.net / usage.html

Piko

0 голосов
/ 29 сентября 2010

попробуйте что-то вроде этого:

    FileOutputStream fos = null;
    try {
        new File(FILE_LOCATION_DIRECTORY).mkdirs();
        File fileLocation = new File(FILE_LOCATION_DIRECTORY + "/" + fileName);
        fos = new FileOutputStream(fileLocation);
        stream.toXML(userAlertSubscription, fos);                
    } catch (IOException e) {
        Log.error(this, "Error %s in file %s", e.getMessage(), fileName);
    } finally {
        IOUtils.closeQuietly(fos);
    }
0 голосов
/ 03 декабря 2008

С http://www.xml.com/pub/a/2004/08/18/xstream.html:

import com.thoughtworks.xstream.XStream;

class Date {
    int year;
    int month;
    int day;
}

public class Serialize {
    public static void main(String[] args) {

        XStream xstream = new XStream();

        Date date = new Date();
        date.year = 2004;
        date.month = 8;
        date.day = 15;

        xstream.alias("date", Date.class);

        String decl = "\n";

        String xml = xstream.toXML(date);

        System.out.print(decl + xml);
    }
}

public class Deserialize {

    public static void main(String[] args) {

        XStream xstream = new XStream();

        Date date = new Date();

        xstream.alias("date", Date.class);

        String xml = xstream.toXML(date);

        System.out.print(xml);

        Date newdate = (Date)xstream.fromXML(xml);
        newdate.month = 12;
        newdate.day = 2;

        String newxml = xstream.toXML(newdate);

        System.out.print("\n\n" + newxml);
    }
}

Затем вы можете взять строку xml и записать ее в файл.

0 голосов
/ 02 декабря 2008

Есть ли какая-то особая причина для использования XStream? Это было бы чрезвычайно легко сделать с чем-то вроде JDOM , если все, что вы делаете, это пытаетесь сериализовать строку или две.

Т.е. что-то вроде: Документ doc = новый документ ();

Element rootEl = new Element("root");
rootEl.setText("my string");
doc.appendChild(rootEl);
XMLOutputter outputter = new XMLOutputter();
outputter.output(doc);

Некоторые из приведенных выше деталей, вероятно, неверны, но это основной процесс. Возможно, вам следует задать более конкретный вопрос, чтобы мы могли точно понять, с какой проблемой вы столкнулись?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...