Если у вас есть ресурсы, вы можете пожертвовать памятью, чтобы улучшить скорость:
static const unsigned bitPositions[MAX_INT] = { 0, 0, 1, 0, 2, /* ... */ };
unsigned GetLowestBitPos(unsigned value)
{
assert(value != 0); // handled separately
return bitPositions[value];
}
Если Эта таблица будет потреблять не менее 4 ГБ (16 ГБ, если мы оставляем возвращаемый тип как unsigned).
Если ваша функция должна оставаться переносной и работать как можно быстрее любой ценой, это будет путь , В большинстве реальных приложений таблица 4 ГБ нереальна.
Вы также можете попробовать следующее:
JFileChooser c = new JFileChooser (); c.showOpenDialog (с); Файл write_file = c.getSelectedFile (); String Content = "Запись в файл"; // то, что вы хотели бы добавить в файл try {RandomAccessFile raf = new RandomAccessFile (write_file, "rw"); long length = raf.length (); //System.out.println(length); raf.setLength (длина + 1); // + (целочисленное значение) для расстояния raf.seek (raf.length ()); raf.writeBytes (содержание); raf.close (); } catch (Исключение e) {// любой метод обработки исключений для выбора ur}
Library
blockquote>import java.io.BufferedWriter; import java.io.File; импортировать java.io.FileWriter; import java.io.IOException;
Код
blockquote>public void append () {try {String path = "D: /sample.txt"; Файл file = новый файл (путь); FileWriter fileWriter = новый FileWriter (файл, true); BufferedWriter bufferFileWriter = new BufferedWriter (fileWriter); fileWriter.append («Пример текста в файле для добавления»); bufferFileWriter.close (); System.out.println («Регистрация пользователя завершена»); } catch (Exception ex) {System.out.println (ex); }}
FileOutputStream fos = new FileOutputStream ("File_Name", true); fos.write (данные);
true позволяет добавлять данные в существующий файл. Если мы напишем
FileOutputStream fos = new FileOutputStream («File_Name»);
Он перезапишет существующий файл. Итак, идите для первого подхода.
Этот код заполнит вашу потребность:
FileWriter fw = new FileWriter («C: \\ file.json», true); fw.write ( "SSSSSS"); fw.close ();
Вы можете использовать код follong для добавления содержимого в файл:
String fileName = "/ home / shriram / Desktop / Images /" + "test.txt"; FileWriter fw = new FileWriter (имя_файла, true); fw.write («здесь вы будете вставлять содержимое или добавлять в файл»); fw.close (); FileWriter fw1 = new FileWriter (имя_файла, true); fw1.write («другое содержимое будет добавлено в тот же файл»); fw1.close ();
Строка str; String path = "C: / Users / ... путь .... / iin.txt"; // вы можете ввести также .. я создал этот путь: P BufferedReader br = новый BufferedReader (новый InputStreamReader (System.in)); PrintWriter pw = новый PrintWriter (новый FileWriter (путь, истина)); try {while (true) {System.out.println ("Введите текст:"); str = br.readLine (); if (str.equalsIgnoreCase («exit»)) break; else pw.println (str); }} catch (Исключение e) {// oh noes! } наконец {pw.close (); }
это сделает то, что вы намереваетесь ..
Это немного тревожно, как многие из этих ответов оставляют дескриптор файла открытым в случае ошибки. Ответ https://stackoverflow.com/a/15053443/2498188 на деньги, но только потому, что BufferedWriter ()
не может выбраться. Если бы это было возможно, исключение оставило бы объект FileWriter
открытым.
Более общий способ сделать это, который не заботится о том, может ли BufferedWriter ()
:
PrintWriter out = null; BufferedWriter bw = null; FileWriter fw = null; try {fw = new FileWriter ("outfilename", true); bw = new BufferedWriter (fw); out = новый PrintWriter (bw); out.println ("текст"); } catch (IOException e) {// Запись / открытие файла на каком-то этапе. } finally {try {if (out! = null) {out.close (); // Закрывает bw и fw too} else if (bw! = Null) {bw.close (); // Закрывает fw too} else if (fw! = Null) {fw.close (); } else {// О, мальчик, это сильно сработало! : 3}} catch (IOException e) {// Закрытие файлов с ошибками для некоторой неясной причины}}
Начиная с Java 7 рекомендуется путь - использовать «попробовать с ресурсами» и позволить JVM справиться с ним:
try (FileWriter fw = new FileWriter («outfilename», true); BufferedWriter bw = new BufferedWriter (fw) ; PrintWriter out = new PrintWriter (bw)) {out.println ("текст"); } catch (IOException e) {// Запись / открытие файла на каком-то этапе. }
PrintWriter.close ()
не объявлен как выбрасывает IOException
в docs . Если посмотреть на источник , метод close ()
, действительно, не может выбрасывать IOException
, потому что он улавливает его из базового потока и устанавливает флаг. Поэтому, если вы работаете над кодом для следующего космического челнока или системы измерения доз рентгеновских лучей, вы должны использовать PrintWriter.checkError ()
после попытки out.close () [ ! d7]. Это должно быть действительно документировано.
– Evgeni Sergeev
14 November 2015 в 08:02
import java.io.BufferedWriter; импортировать java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; public class Writer {public static void main (String args []) {doWrite ("output.txt", "Содержимое для добавления в файл"); } public static void doWrite (String filePath, String contentToBeAppended) {try (FileWriter fw = new FileWriter (filePath, true); BufferedWriter bw = new BufferedWriter (fw); PrintWriter out = new PrintWriter (bw)) {out.println (contentToBeAppended ); } catch (IOException e) {// Запись / открытие файла на каком-то этапе. }}}
Вы можете использовать fileWriter
с флагом, установленным на true
, для добавления.
try {String filename = "MyFile.txt «; FileWriter fw = new FileWriter (имя файла, true); // true добавит новые данные fw.write ("add a line \n"); // добавляет строку в файл fw.close (); } catch (IOException ioe) {System.err.println ("IOException:" + ioe.getMessage ()); }
close
следует поместить в блок finally
так же, как показано в ответе @ etech в случае, если исключение будет создано между созданием FileWriter и вызовом close.
– Pshemo
13 March 2015 в 22:19
fw.close ()
в блоке finally, без вложенного try / catch ( .close ()
может вызывать IOException
)
– Kip
17 August 2016 в 19:59
Это можно сделать в одной строке кода. Надеюсь, это поможет:)
Files.write (Paths.get (имя_файла), msg.getBytes (), StandardOpenOption.APPEND);
Использование java.nio. Файлы вместе с java.nio.file. StandardOpenOption
PrintWriter out = null; BufferedWriter bufWriter; try {bufWriter = Files.newBufferedWriter (Paths.get («log.txt»), Charset.forName («UTF8»), StandardOpenOption.WRITE, StandardOpenOption.APPEND, StandardOpenOption.CREATE); out = new PrintWriter (bufWriter, true); } catch (IOException e) {// О, нет! Не удалось создать PrintWriter} // После успешного создания PrintWriter out.println («Текст будет добавлен»); // После написания, не забудьте закрыть! out.close ();
Это создает BufferedWriter
, используя Files, который принимает параметры StandardOpenOption
и автозапуска PrintWriter
из результирующего BufferedWriter
. Метод PrintWriter
println ()
может быть вызван для записи в файл.
Используемые параметры StandardOpenOption
в этом коде: открывает файл для записи, только добавляет к файлу и создает файл, если он не существует.
Paths.get («путь здесь»)
может заменить на новый файл («путь здесь»). toPath ()
. И Charset.forName («charset name»)
можно изменить, чтобы разместить желаемую Charset
.
Если мы используем Java 7 и выше, а также знаем, какой контент будет добавлен (добавлен) в файл, мы можем использовать метод newBufferedWriter в пакете NIO.
public static void main (String [] args) {Путь FILE_PATH = Paths.get ("C: / temp", "temp.txt"); String text = "\n Добро пожаловать в Java 8"; // Запись в файл temp.txt try (BufferedWriter writer = Files.newBufferedWriter (FILE_PATH, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {writer.write (текст); } catch (IOException e) {e.printStackTrace (); }}
Следует отметить несколько замечаний:
] StandardCharsets
. try-with-resource
, в которой ресурсы автоматически закрываются после попытки. ] Хотя OP не спросил, но на всякий случай мы хотим искать строки с определенным ключевым словом, например privacy
мы можем использовать потоковые API в Java:
// Чтение из файла первой строки, содержащей слово «конфиденциальный», try {Stream & lt; String & gt; lines = Files.lines (FILE_PATH); Дополнительно & Lt; & Строка GT; containsJava = lines.filter (l- & gt; l.contains («конфиденциально»)) findFirst (); if (содержитJava.isPresent ()) {System.out.println (содержитJava.get ()); }} catch (IOException e) {e.printStackTrace (); }
write (String string)
, если вы ожидаете новую строку после каждой строки, написанной, следует называть newLine ()
– yongtw123
26 June 2015 в 10:20
java 7 +
По моему скромному мнению, поскольку я фанат простой java, я бы предложил что-то, что это комбинация вышеупомянутых ответов. Может быть, я опаздываю на вечеринку. Вот код:
String sampleText = "test" + System.getProperty ("line.separator"); Files.write (Paths.get (filePath), sampleText.getBytes (StandardCharsets.UTF_8), StandardOpenOption.CREATE, StandardOpenOption.APPEND);
Если файл не существует, он создает его, и если он уже существует, он добавляет sampleText к существующему файлу. Используя это, вы избавляетесь от добавления ненужных библиотек в ваш путь к классам.
Если вы хотите ДОБАВИТЬ НЕКОТОРЫЙ ТЕКСТ В КОНКРЕТНЫХ ЛИНИЯХ, вы можете сначала прочитать весь файл, добавить текст туда, где хотите, а затем перезаписать все, как в приведенном ниже коде:
public static void addDatatoFile (String data1, String data2) {String fullPath = "/home/user/dir/file.csv"; Файл dir = новый файл (fullPath); Список & л; Строка & GT; l = новый LinkedList & lt; String & gt; (); try (BufferedReader br = new BufferedReader (новый FileReader (dir))) {Строка; int count = 0; while ((line = br.readLine ())! = null) {if (count == 1) {// добавить данные в конце второй строки строки = = data1; } else if (count == 2) {// добавить другие данные в конце третьей строки + = data2; } l.add (строка); подсчитывать ++; } br.close (); } catch (FileNotFoundException e) {e.printStackTrace (); } catch (IOException e) {e.printStackTrace (); } createFileFromList (l, dir); } public static void createFileFromList (List & lt; String & gt; list, File f) {PrintWriter writer; try {writer = new PrintWriter (f, "UTF-8"); for (String d: list) {writer.println (d.toString ()); } writer.close (); } catch (FileNotFoundException | UnsupportedEncodingException e) {e.printStackTrace (); }}
/ ******************************************* *************************** * он будет записывать содержимое в указанный файл * * @param keyString * @throws IOException ***** ************************************************** ************** / public static void writeToFile (String keyString, String textFilePAth) throws IOException {// Для вывода в файл Файл a = новый файл (textFilePAth); if (! a.exists ()) {a.createNewFile (); } FileWriter fw = new FileWriter (a.getAbsoluteFile (), true); BufferedWriter bw = новый BufferedWriter (fw); bw.append (KeyString); bw.newLine (); bw.close (); } // конец writeToFile ()
Лучше использовать try-with-resources, а затем все, что pre-java 7 finally business
static void appendStringToFile (файл пути, строка) бросает IOException {try (BufferedWriter out = Files. newBufferedWriter (файл, StandardCharsets.UTF_8, StandardOpenOption.APPEND)) {out.append (s); out.newLine (); }}
Создайте функцию в любом месте вашего проекта и просто вызовите эту функцию, когда она вам понадобится.
Ребята, вы должны помнить, что вы, ребята, вызываете активные потоки, которые вы не вызываете асинхронно, и поскольку это вероятно, будет хорошим от 5 до 10 страниц, чтобы сделать это правильно. Почему бы не потратить больше времени на ваш проект и забыть о написании написанного. Правильно
// Добавление статического модификатора сделало бы это доступным в любом месте вашего приложения публичным Logger getLogger () {return java.util.logging.Logger.getLogger («MyLogFileName»); } // вызываем метод в любом месте и добавляем то, что вы хотите регистрировать // класс Logger позаботится о том, чтобы поставить для вас отметки времени // плюс те, которые выполнены так же, как и больше, процессорная мощность войдет в ваше приложение // изнутри тело функции в том же классе ... {... getLogger (). log (Level.INFO, «текст, который вы хотите добавить»); ...} ... / ********* файл журнала находится в файлах корневого файла сервера ******** /
три строки кода два действительно, поскольку третий фактически добавляет текст. :
PИзменить - с Apache Commons 2.1 правильный способ сделать это:
FileUtils.writeStringToFile (файл, «String to append», true);
Я адаптировал решение @ Kip, чтобы включить правильное закрытие файла, наконец: public static void appendToFile (String targetFile, String s) throws IOException {appendToFile (новый файл (targetFile), с); } public static void appendToFile (File targetFile, String s) throws IOException {PrintWriter out = null; try {out = new PrintWriter (новый BufferedWriter (новый FileWriter (targetFile, true))); out.println (ы); } finally {if (out! = null) {out.close (); }}}
1.7 Подход:
void appendToFile (String filePath, String content) бросает IOException {Path path = Paths.get (filePath); try (BufferedWriter writer = Files.newBufferedWriter (путь, StandardOpenOption.APPEND)) {writer.newLine (); writer.append (содержание); } / * // Альтернатива: try (BufferedWriter bWriter = Files.newBufferedWriter (путь, StandardOpenOption.WRITE, StandardOpenOption.APPEND); PrintWriter pWriter = новый PrintWriter (bWriter)) {pWriter.println (); // иметь println () стиль вместо newLine (); pWriter.append (content); // Также, bWriter.append (content); } * /}
FileOutputStream stream = new FileOutputStream (путь, истина); try {stream.write (string.getBytes ("UTF-8") // Выберите кодировку.); } finally {stream.close (); }
Затем поймайте исключение IO где-то вверх по потоку.
Чтобы немного расширить на ответ Кипа , вот простой метод Java 7+ для добавления новой строки в файл, создавая его, если он еще не существует:
try {final Path path = Paths.get ("путь / to / filename.txt"); Files.write (путь, Arrays.asList («Новая строка для добавления»), StandardCharsets.UTF_8, Files.exists (путь)? StandardOpenOption.APPEND: StandardOpenOption.CREATE); } catch (final IOException ioe) {// Добавляем вашу собственную обработку исключений ...}
Примечание: В приведенном выше примере используется файл Files.write [ ! d1], который записывает строки текста в файл (т. е. аналогично команде println
). Чтобы просто написать текст до конца (т. Е. Аналогично команде print
), можно использовать перегрузку Files.write , проходящую в байтовом массиве (например, "MYTEXT" .getBytes (StandardCharsets.UTF_8)
).
В Java-7 это также можно сделать следующим образом:
import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardOpenOption;
// ---------------------
Путь filePath = Paths.get ( "somefile.txt"); if (! Files.exists (filePath)) {Files.createFile (filePath); } Files.write (filePath, «Текст для добавления» .getBytes (), StandardOpenOption.APPEND);
Я просто добавляю небольшие детали:
new FileWriter («outfilename», true)
2.nd (true) - это функция ( или, интерфейс), называемый appendable ( http://docs.oracle.com/javase/7/docs/api/java/lang/Appendable.html ). Он отвечает за возможность добавления некоторого контента в конец конкретного файла / потока. Этот интерфейс реализован с Java 1.5. Каждый объект (например, BufferedWriter, CharArrayWriter, CharBuffer, FileWriter, FilterWriter, LogStream, OutputStreamWriter, PipedWriter, PrintStream, PrintWriter, StringBuffer, StringBuilder, StringWriter, Writer) с этим интерфейсом может использоваться для добавления контента
В других слова, вы можете добавить некоторый контент в свой gzip-файл или какой-то http-процесс