2012-05-18 51 views
3

我有一个java字符串变量的文件内容,我想将它转换成一个File对象是可能的吗?如何将字符串转换为Java中的文件对象?

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 
} 
+0

嗯,你能告诉我们你想达到什么吗?为什么是一个File对象?我不确定我明白。 – Ewald

+0

@Ewald:这是[this]的延续(http://stackoverflow.com/questions/10639819/how-to-upload-a-file-using-apache-commons-file-upload-from-a-servlet ) – abi1964

+0

我看到 - 下面有两个答案,我不会污染更多的帖子! – Ewald

回答

7

因为这是Groovy中,可以简化其他两个答案有:

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

这将文件句柄返回到它只是写content

+1

+1,因为它是groovy! –

+0

@tim_yates:除了'XmlSlurper''它给了我'[致命错误] E:%5CTomcat%206%5Cbin%5C ..%5Cwebapps%5Ccsm%5Cfiles%5C1-105101%5Cac onsole1_csmagentinhyundai_9以外,一切都很顺利。 1.xml:1:1:在序言中不允许使用内容。 org.xml.sax.SAXParseException:在prolog中不允许使用内容。xml的第一行是'<?xml version =“1.0”encoding =“UTF-8”?> – abi1964

+0

我认为它是无效的XML然后写入文件?你有看过吗?你可以直接从字符串中读取XmlSlurper,然后再将它写入文件中? –

0

您可以使用File(String)构造函数总是创建一个从String一个File对象。请注意,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将使用平台默认的编码时,将字符串的字符转换为可写入磁盘的字节。如果这是一个问题,您可以通过在OutputStreamWriter中包装FileOutputStream来使用不同的编码。例如:

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)只需instanciates新File对象名称为filename(它不实际上在您的磁盘上创建文件)。因此,您声明:

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

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

2

文件尝试使用apache commons io LIB

org.apache.commons.io.FileUtils.writeStringToFile(File file, String data)