我需要能够序列化一个字符串,然后将其保存在.txt或.xml文件中。我从未使用过实现来读/写文件,只记得我是一个相对初学者。另外,我需要知道如何将终端中要打印的字符串反序列化为普通字符串。
答案 0 :(得分:5)
XStream具有读取和写入文件的功能,请参阅简单示例(Writer.java和Reader.java)in this article。
答案 1 :(得分:4)
如果您可以将其序列化为txt文件,只需打开一个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()。如果你真的想要花哨(因为这毕竟是一个硬件分配),你可以使用for循环并单独打印每个字符。使用XML比序列化String所需的更复杂,使用外部库只是一种过度的做法。
答案 2 :(得分:3)
如果您正在开始使用Java,那么请花点时间浏览一下Apache Commons项目。有很多基本的java扩展,你可以多次使用它。
我假设您只想保留一个字符串,以便稍后再读取它 - 在这种情况下,它不一定需要是XML。
要将字符串写入文件,请参阅org.apache.commons.io.FileUtils:
FileUtils.writeStringToFile(File file,String data)
要读回来:
FileUtils.readFileToString(File file)
参考文献:
http://commons.apache.org/io/api-release/org/apache/commons/io/FileUtils.html
请务必查看commons-lang以获取大量基本内容。
答案 3 :(得分:1)
如果您需要创建一个包含表示对象内容的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 );
从那里刚刚将String写入您的文件。比所有那些XML API简单得多。但是,现在,如果你需要符合DTD或XSD,这是一个糟糕的方式,因为它更加自由格式并且只符合对象布局。
http://json-lib.sourceforge.net/usage.html
Piko的
答案 4 :(得分:0)
使用XStream有什么特别的理由吗?如果您正在尝试序列化一两个字符串,那么使用JDOM之类的内容非常容易。
是的,比如: 文档doc = new Document();Element rootEl = new Element("root");
rootEl.setText("my string");
doc.appendChild(rootEl);
XMLOutputter outputter = new XMLOutputter();
outputter.output(doc);
上面的一些细节可能是错误的,但这就是基本流程。也许你应该问一个更具体的问题,这样我们才能准确理解你所遇到的问题?
答案 5 :(得分:0)
来自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字符串并将其写入文件。
答案 6 :(得分:0)
尝试这样的事情:
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);
}