Скопируйте строку в начало файла в Java - PullRequest
1 голос
/ 07 сентября 2011

Я хочу записать строку в начало файла. Как мне это сделать?

Я вообще не знаю, как добавить строку .. Это то, что я делал до сих пор:

  public static void prepend (String filename, String data) throws IOException{

    FileOutputStream file= new FileOutputStream(filename);

}

(i) Метод write() принимает только байты. Что мне делать, чтобы использовать его в моем случае?

(ii) -Как скопировать строку в начало файла?

И - Если кто-то знает о веб-сайте, на котором все писатели \ читатели и все эти потоки организованы и хорошо объяснены - я буду очень признателен, я схожу с ума.

Спасибо!

Ответы [ 6 ]

8 голосов
/ 08 сентября 2011

Вы можете просто использовать класс 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");
}
6 голосов
/ 07 сентября 2011

Чтобы написать текст , вам нужно создать Writer - например, OutputStreamWriter.Вы можете использовать FileWriter вместо этого, но я предпочитаю обернуть FileOutputStream в OutputStreamWriter, так как я могу контролировать кодировку.

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

1 голос
/ 07 сентября 2011

Вы можете сделать несколько вещей.

Создать PrintStream, передав в созданный вами «файл», затем использовать println (данные) для печати данных или просто напечатать (данные), если вы неПосле того, как после него будет добавлена ​​новая строка, зависящая от системы.

Вы можете создать outputtreamwriter, чтобы обернуть созданный вами outputtream, а затем обернуть его с помощью printwriter, чтобы получить то же поведение, что и выше.

Подход писателя лучше всего, поскольку он обрабатывает кодировку символов, если вам это нужно.

0 голосов
/ 23 сентября 2017

здесь работает код.

приватный статический void addHeader (имя файла) {

    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();

        }

    }

}
0 голосов
/ 07 сентября 2011
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();}
}
0 голосов
/ 07 сентября 2011

Вы можете использовать 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...