如何在Java中将字符串转换为文件对象?

4

我有一个Java字符串变量存储了文件内容,我想将其转换为File对象,这是否可行?

public void setCfgfile(File cfgfile)
{
    this.cfgfile = cfgfile
}

public void setCfgfile(String cfgfile)
{
    println "ok overloaded function"
    this.cfgfile = new File(getStreamFromString(cfgfile))
}
private def getStreamFromString(String str)
{
    // convert String into InputStream
    InputStream is = new ByteArrayInputStream(str.getBytes())
    is
}

嗯,你能告诉我们你想要实现什么吗?为什么需要一个文件对象?我不确定我理解了。 - Ewald
@Ewald:这是一个连接到这个的续篇。 - AabinGunz
我看到下面有两个答案,我不会在帖子中再添加更多! - Ewald
4个回答

7

由于这是Groovy,您可以使用以下方法简化其他两个答案:

File writeToFile( String filename, String content ) {
  new File( filename ).with { f ->
    f.withWriter( 'UTF-8' ) { w ->
      w.write( content )
    }
    f
  }
}

这将返回一个文件句柄,指向它刚写入content的文件。


@tim_yates:一切都很顺利,除了XmlSlurper,它给了我一个 [Fatal Error] E:%5CTomcat%206%5Cbin%5C..%5Cwebapps%5Ccsm%5Cfiles%5C1-105101%5Cac onsole1_csmagentinhyundai_9.1.xml:1:1: Content is not allowed in prolog. org.xml.sax.SAXParseException: Content is not allowed in prolog.。XML的第一行是 <?xml version="1.0" encoding="UTF-8"?> - AabinGunz
你写入文件的XML格式是否无效?你查看过吗?在将其写入文件之前,您能否直接从字符串中使用XmlSlurper读取它? - tim_yates
XML文件没问题,因为当我直接传递XML文件时 FileBody bin = new FileBody(new File("C:\\Simon\\csmagentinhyundai_9.1.xml")); 它可以正确上传,并且解析器也能正常工作。 - AabinGunz
也许这是另一个问题? - tim_yates
好的,我不想显得卖弄学问,但我最酷的版本将是:def f=filename as File f.withWriter('UTF-8'){it << content} - Luis Muñiz
抱歉,不知道为什么我无法编译你的代码。 - Lavekush Agrawal

2
尝试使用apache commons io库。
org.apache.commons.io.FileUtils.writeStringToFile(File file, String data)

1

您可以使用File(String)构造函数从String创建一个File对象。请注意,文件对象仅表示抽象路径名;而不是磁盘上的文件。

如果您想要在磁盘上创建包含字符串内容的实际文件,则可以使用几个类,例如:

try {
    Writer f = new FileWriter(nameOfFile);
    f.write(stringToWrite);
    f.close();
} catch (IOException e) {
    // unable to write file, maybe the disk is full?
    // you should log the exception but printStackTrace is better than nothing
    e.printStackTrace();
}

FileWriter会在将字符串的字符转换为可写入磁盘的字节时使用平台默认编码。如果这是一个问题,您可以通过将FileOutputStream包装在OutputStreamWriter中来使用不同的编码。例如:

String encoding = "UTF-8";
Writer f = new OutputStreamWriter(new FileOutputStream(nameOfFile), encoding);

0

如果要将一个 String 写入文件,通常应该使用 BufferedWriter

private writeToFile(String content) {
    BufferedWriter bw;
    try {
        bw = new BufferedWriter(new FileWriter(this.cfgfile));
        bw.write(content);
     }
    catch(IOException e) {
       // Handle the exception
    }
    finally {   
        if(bw != null) {
            bw.close();
        }
    }
}

此外,new File(filename) 只是简单地实例化一个名为 filename 的新 File 对象(它并不会在您的磁盘上实际创建文件)。因此,您的语句是:

this.cfgfile = new File(getStreamFromString(cfgfile))

将简单实例化一个新的File,其名称为this.cfgfile = new File(getStreamFromString方法返回的String


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接