我想在文件的开头写一个字符串,我该怎么做?
我根本不知道如何添加字符串..这是我到目前为止所做的:
public static void prepend (String filename, String data) throws IOException{
FileOutputStream file= new FileOutputStream(filename);
}
(i)write()
方法只接受字节 - 在我的情况下我应该怎么做才能使用它?
(ii) - 如何将字符串复制到文件的开头?
并且 - 如果有人知道一个网站上有所有的作家\读者和所有这些流被排列和解释得很好 - 我会非常感激,我会失去理智。
谢谢!
答案 0 :(得分:8)
您可以使用RandomAccessFile类。
http://download.oracle.com/javase/6/docs/api/java/io/RandomAccessFile.html
public static void main(String[] args) throws Exception {
RandomAccessFile file = new RandomAccessFile("test.txt", "rws");
byte[] text = new byte[(int) file.length()];
file.readFully(text);
file.seek(0);
file.writeBytes("Prepend 8");
file.write(text);
file.close();
System.out.println("Done");
}
答案 1 :(得分:6)
要编写文本,您需要创建Writer
- 例如OutputStreamWriter
。您可以使用FileWriter
代替,但我更愿意将FileOutputStream
包裹在OutputStreamWriter
中,因为我可以控制编码。
你不能真正预先添加到文件的开头 - 你必须将新文本写入新文件的开头,然后复制旧文件的内容,然后在必要时重命名文件。具体如何操作将取决于现有文件的内容。
答案 2 :(得分:1)
你可以做很多事情。
创建一个PrintStream,传入您创建的“文件”,然后使用println(数据)打印数据,或者只是打印(数据),如果您不想在其后添加系统相关的新行。
您可以创建一个输出流写入器来包装您创建的输出流,然后使用printwriter将其包装起来以获得与上面相同的行为。
如果您需要,编写器方法在处理字符编码时会更好。
答案 3 :(得分:0)
您可以使用BufferedWriter,即
// read the existing contents of the file into a string builder
BufferedReader is = new BufferedReader
(new InputStreamReader(new FileInputStream(filename)));
StringBuilder sb = new StringBuilder();
String line;
while ((line = is.readLine()) != null) {
sb.append(line);
}
// open the file for writing
BufferedWriter s = new BufferedWriter
(new OutputStreamWriter(new FileOutputStream(filename)));
// prepend your text
s.writeLine("some line of text to prepend");
// rewrite the file contents
s.writeLine(sb.toString());
答案 4 :(得分:0)
public static void prepend(String filename,string data) throws IOException{
BufferedReader in = new BufferedReader(new FileReader(fileName));
StringBuilder reply = new StringBuilder();
reply.append(data);
String str = new String();
while( (str = in.readLine())!=null)
reply.append(str);
str = reply.toString();
BufferedWriter out= new BufferedWriter(new FileWriter(filename));
out.write(str);
if(in !=null){
try{ in.close();} catch(IOException e){e.printStackTrace();}
if(out!=null)
try{out.close();} catch(IOException ex) {ex.printStackTrace();}
}
答案 5 :(得分:0)
这里是运行代码。
private static void addHeader(File fileName){
FileOutputStream fileOutputStream =null;
BufferedReader br = null;
FileReader fr = null;
String newFileName = fileName.getAbsolutePath() + "@";
try {
fileOutputStream = new FileOutputStream(newFileName);
fileOutputStream.write("yourCopiedDataHere".getBytes());
fr = new FileReader(fileName);
br = new BufferedReader(fr);
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
fileOutputStream.write(("\n"+sCurrentLine).getBytes());
}
fileOutputStream.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fileOutputStream.close();
if (br != null)
br.close();
if (fr != null)
fr.close();
System.out.println(fileName+" is deleted "+ fileName.delete());
new File(newFileName).renameTo(new File(newFileName.replace("@", "")));
} catch (IOException ex) {
ex.printStackTrace();
}
}
}