Как изменить расширение txt на java

Я недавно не делал этого в Java, но запись всего файла в память кажется плохой идеей. Лучшая идея,... Вопрос по теме: java.

11 ответов

Я недавно не делал этого в Java, но запись всего файла в память кажется плохой идеей.

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

Если у вас есть права на изменение в файловой системе, возможно, вы также имеете права на удаление и переименование.

Andrei Krotkov
04 май 2009, в 22:20

Поделиться

если в файле всего несколько тысяч строк, вы должны прочитать весь файл в одном чтении и преобразовать его в строку.

Вы можете использовать apache IOUtils, который имеет следующий метод.

public static String readFile(String filename) throws IOException {
    File file = new File(filename);
    int len = (int) file.length();
    byte[] bytes = new byte[len];
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(file);
        assert len == fis.read(bytes);
    } catch (IOException e) {
        close(fis);
        throw e;
    }
    return new String(bytes, "UTF-8");
}

public static void writeFile(String filename, String text) throws IOException {
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(filename);
        fos.write(text.getBytes("UTF-8"));
    } catch (IOException e) {
        close(fos);
        throw e;
    }
}

public static void close(Closeable closeable) {
    try {
        closeable.close();
    } catch(IOException ignored) {
    }
}

Peter Lawrey
05 май 2009, в 08:26

Поделиться

Если файл большой, вы можете использовать FileStream для вывода, но это похоже на то, что это самый простой процесс, чтобы делать то, что вы просите (и без дополнительной специфики, то есть о том, какие типы изменений/изменений/delete, которые вы пытаетесь сделать, невозможно определить, какой более сложный способ может работать).

Paul Sonier
04 май 2009, в 23:24

Поделиться

Каковы данные? Вы управляете форматом файла?

Если файл содержит пары имя/значение (или аналогичные), вам может быть повезло с Properties или, возможно, что-то использует драйвер JDBC с плоским файлом.

В качестве альтернативы вы считаете, что не так часто записываете данные? Работа с копией файла в памяти должна быть относительно тривиальной. Если нет внешних ресурсов, которые нуждаются в обновлении файла в реальном времени, тогда нет необходимости переходить на диск каждый раз, когда вы хотите внести изменения. Вы можете запустить запланированную задачу для записи периодических обновлений на диск, если вас беспокоит резервное копирование данных.

James Van Huis
04 май 2009, в 23:24

Поделиться

Нет причин для буферизации всего файла.

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

По сути, вам не придется обновлять файл, особенно если это текстовый файл.

Will Hartung
04 май 2009, в 23:12

Поделиться

Вы можете использовать RandomAccessFile в Java для изменения файла при одном условии:
Размер каждой строки должен быть исправлен иначе, когда новая строка будет записана обратно, она может переопределить строку в следующей строке.

Поэтому в моем примере я устанавливаю длину строки как 100 и заполняю строку пробела при создании файла и записи обратно в файл.

Итак, чтобы разрешить обновление, вам нужно установить длину строки немного больше самой длинной длины строки в этом файле.

public class RandomAccessFileUtil {
public static final long RECORD_LENGTH = 100;
public static final String EMPTY_STRING = " ";
public static final String CRLF = "n";

public static final String PATHNAME = "/home/mjiang/JM/mahtew.txt";

/**
 *  one two three
    Text to be appended with
    five six seven
    eight nine ten
 * 
 * 
 * @param args
 * @throws IOException
 */
public static void main(String[] args) throws IOException
{
    String starPrefix = "Text to be appended with";
    String replacedString = "new text has been appended";

    RandomAccessFile file = new RandomAccessFile(new File(PATHNAME), "rw");

    String line = "";
    while((line = file.readLine()) != null)
    {
        if(line.startsWith(starPrefix))
        {
            file.seek(file.getFilePointer() - RECORD_LENGTH - 1);
            file.writeBytes(replacedString);
        }

    }
}

public static void createFile() throws IOException
{
    RandomAccessFile file = new RandomAccessFile(new File(PATHNAME), "rw");

    String line1 = "one two three";
    String line2 = "Text to be appended with";
    String line3 = "five six seven";
    String line4 = "eight nine ten";

    file.writeBytes(paddingRight(line1));
    file.writeBytes(CRLF);
    file.writeBytes(paddingRight(line2));
    file.writeBytes(CRLF);
    file.writeBytes(paddingRight(line3));
    file.writeBytes(CRLF);
    file.writeBytes(paddingRight(line4));
    file.writeBytes(CRLF);

    file.close();

    System.out.println(String.format("File is created in [%s]", PATHNAME));
}

public static String paddingRight(String source)
{
    StringBuilder result = new StringBuilder(100);
    if(source != null)
    {
        result.append(source);
        for (int i = 0; i < RECORD_LENGTH - source.length(); i++)
        {
            result.append(EMPTY_STRING);
        }
    }

    return result.toString();
}

}

sendon1982
28 март 2014, в 03:37

Поделиться

Несмотря на то, что этот вопрос был опубликован, я думаю, что это хорошо, чтобы ответить на этот вопрос.
Я считаю, что наилучшим подходом является использование пакета FileChannel из java.nio.channels в этом сценарии. Но это, только если вам нужно иметь хорошую производительность! Вам нужно будет получить FileChannel через RandomAccessFile, например:

java.nio.channels.FileChannel channel = new java.io.RandomAccessFile("/my/fyle/path", "rw").getChannel();

После этого вам нужно создать a ByteBuffer, где вы будете читать из FileChannel.

это выглядит примерно так:


java.nio.ByteBuffer inBuffer = java.nio.ByteBuffer.allocate(100);
int pos = 0;
int aux = 0;
StringBuilder sb = new StringBuilder();

while (pos != -1) {

    aux = channel.read(inBuffer, pos);
    pos = (aux != -1) ? pos + aux : -1;

    b = inBuffer.array();
    sb.delete(0, sb.length());

    for (int i = 0; i < b.length; ++i) {

         sb.append((char)b[i]);

    }

    //here you can do your stuff on sb

    inBuffer = ByteBuffer.allocate(100);

}

Надеюсь, что мой ответ вам поможет!

artaxerxe
04 апр. 2012, в 12:04

Поделиться

Не можете ли вы использовать регулярные выражения, если знаете, что хотите изменить? Jakarta Regexp должен, вероятно, сделать трюк.

Valentin Rocher
10 май 2009, в 13:51

Поделиться

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

lumpynose
04 май 2009, в 21:40

Поделиться

Вы можете изменить txt файл на java, сохранив при нажатии «Сохранить как» и сохраните расширение *.java.

UmaShankar
11 май 2017, в 10:31

Поделиться

Ещё вопросы

  • 0Текст мерцает во время анимации на Firefox
  • 0SPA хостинг на IIS создает проблемы маршрутизации
  • 0Используйте .htaccess, чтобы удалить расширения файлов, а также разрешить установку домашней страницы.
  • 0Карты Google не будут отображаться до обновления страницы
  • 1Метеор Курурин Пагинация не работает
  • 0Защита Hotlink Facebook не получает изображения
  • 1Как хранить переменную массива JSON и печатать конкретное значение. (ЯВА)
  • 1почему Linq намного быстрее
  • 0Android: fromhtml оставляет детали шрифта в строке
  • 1Свойство доступа к полю Java Hibernate или доступ на основе свойств
  • 1Более обратный формат даты возврата
  • 0PHP SOAP-клиент несколько элементов
  • 0Как получить атрибут раскрывающегося списка в jquery
  • 1MVC FromUri & amp; 3B
  • 0.htaccess — Как добавить http: // www. на нескольких условиях
  • 0Обрабатывать токен доступа в angularJS
  • 0blueimp jQuery-File-Upload не работает
  • 0Кто-нибудь уже использовал библиотеку Triangle / Triangle ++ в проекте C ++? (триангуляция Делоне)
  • 0ИЛИ условие в регулярном выражении
  • 0Правильный путь для загрузки файла на сервер
  • 1Как вернуть объект из службы отдыха в Java?
  • 1добавить поле в модуль odoo localhost
  • 0JQuery: предотвращение запуска функции до тех пор, пока другая функция не будет выполнена условно за «X» промежуток времени
  • 0Строка поиска в текстовом файле, которая начинается с определенного слова и заканчивается другим конкретным словом
  • 0Как мне избавиться от пустого пространства по бокам моего сайта? Повторите фон? изменить размер div? Я заблудился
  • 0MySQL — расширение диапазона дат на отдельные даты
  • 1Java с плавающей точкой в IEEE-754 шестнадцатеричной?
  • 0Как выполнить событие нажатия одной кнопкой, чтобы выбрать другой DIV
  • 1Firefox запускает событие нажатия одновременно с событием contextmenu
  • 0Изменение размера текстуры / RT
  • 0MySQL считает разные значения в одной таблице
  • 1первый андроид сервис
  • 1концентрические излучающие круги d3
  • 1Рабочая роль Azure Что пошло не так до метода OnRun ()?
  • 1Регулировка размера участка Seaborn [копия]
  • 0Возврат невременного объекта из функции C ++ с ограниченным сроком службы
  • 1Это хорошее использование ?? оператор?
  • 1какая разница между двумя кодами
  • 1вопрос о Three.js, когда я использую trackballcontrols.js
  • 0Отправить название столбца с кнопки
  • 0Использование Javascript для вычисления полей формы с комбинацией переключателей, текстовых полей и ползунка
  • 0Php / json_encode NULL выпускает
  • 0Получение номера ручки открытой на поток
  • 0Нажмите импортировать изображение
  • 1События браузера прерывают выполнение кода JavaScript?
  • 0невозможно использовать datetimepicker с jquery mobile
  • 0Изменение $ scope внутри контроллера
  • 0Проблема кодирования CSS с моим логотипом и встроенным блоком навигации не выстраиваются
  • 0Makefile — C ++ 11
  • 0Как сортировать четные и нечетные числа поочередно с ограничением времени и сложности пространства (C / C ++)

I have a text file that I want to edit using Java. It has many thousands of lines. I basically want to iterate through the lines and change/edit/delete some text. This will need to happen quite often.

From the solutions I saw on other sites, the general approach seems to be:

  • Open the existing file using a BufferedReader
  • Read each line, make modifications to each line, and add it to a StringBuilder
  • Once all the text has been read and modified, write the contents of the StringBuilder to a new file
  • Replace the old file with the new file

This solution seems slightly «hacky» to me, especially if I have thousands of lines in my text file.

Anybody know of a better solution?

Kara's user avatar

Kara

6,06516 gold badges51 silver badges57 bronze badges

asked May 4, 2009 at 21:29

Zakir Hemraj's user avatar

1

I haven’t done this in Java recently, but writing an entire file into memory seems like a bad idea.

The best idea that I can come up with is open a temporary file in writing mode at the same time, and for each line, read it, modify if necessary, then write into the temporary file. At the end, delete the original and rename the temporary file.

If you have modify permissions on the file system, you probably also have deleting and renaming permissions.

answered May 4, 2009 at 21:33

Andrei Krotkov's user avatar

Andrei KrotkovAndrei Krotkov

5,4963 gold badges33 silver badges36 bronze badges

2

if the file is just a few thousand lines you should be able to read the entire file in one read and convert that to a String.

You can use apache IOUtils which has method like the following.

public static String readFile(String filename) throws IOException {
    File file = new File(filename);
    int len = (int) file.length();
    byte[] bytes = new byte[len];
    FileInputStream fis = null;
    try {
        fis = new FileInputStream(file);
        assert len == fis.read(bytes);
    } catch (IOException e) {
        close(fis);
        throw e;
    }
    return new String(bytes, "UTF-8");
}

public static void writeFile(String filename, String text) throws IOException {
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(filename);
        fos.write(text.getBytes("UTF-8"));
    } catch (IOException e) {
        close(fos);
        throw e;
    }
}

public static void close(Closeable closeable) {
    try {
        closeable.close();
    } catch(IOException ignored) {
    }
}

answered May 5, 2009 at 6:28

Peter Lawrey's user avatar

Peter LawreyPeter Lawrey

521k76 gold badges745 silver badges1125 bronze badges

You can use RandomAccessFile in Java to modify the file on one condition:
The size of each line has to be fixed otherwise, when new string is written back, it might override the string in the next line.

Therefore, in my example, I set the line length as 100 and padding with space string when creating the file and writing back to the file.

So in order to allow update, you need to set the length of line a little larger than the longest length of the line in this file.

public class RandomAccessFileUtil {
public static final long RECORD_LENGTH = 100;
public static final String EMPTY_STRING = " ";
public static final String CRLF = "n";

public static final String PATHNAME = "/home/mjiang/JM/mahtew.txt";

/**
 *  one two three
    Text to be appended with
    five six seven
    eight nine ten
 * 
 * 
 * @param args
 * @throws IOException
 */
public static void main(String[] args) throws IOException
{
    String starPrefix = "Text to be appended with";
    String replacedString = "new text has been appended";

    RandomAccessFile file = new RandomAccessFile(new File(PATHNAME), "rw");

    String line = "";
    while((line = file.readLine()) != null)
    {
        if(line.startsWith(starPrefix))
        {
            file.seek(file.getFilePointer() - RECORD_LENGTH - 1);
            file.writeBytes(replacedString);
        }

    }
}

public static void createFile() throws IOException
{
    RandomAccessFile file = new RandomAccessFile(new File(PATHNAME), "rw");

    String line1 = "one two three";
    String line2 = "Text to be appended with";
    String line3 = "five six seven";
    String line4 = "eight nine ten";

    file.writeBytes(paddingRight(line1));
    file.writeBytes(CRLF);
    file.writeBytes(paddingRight(line2));
    file.writeBytes(CRLF);
    file.writeBytes(paddingRight(line3));
    file.writeBytes(CRLF);
    file.writeBytes(paddingRight(line4));
    file.writeBytes(CRLF);

    file.close();

    System.out.println(String.format("File is created in [%s]", PATHNAME));
}

public static String paddingRight(String source)
{
    StringBuilder result = new StringBuilder(100);
    if(source != null)
    {
        result.append(source);
        for (int i = 0; i < RECORD_LENGTH - source.length(); i++)
        {
            result.append(EMPTY_STRING);
        }
    }

    return result.toString();
}

}

answered Mar 28, 2014 at 2:38

sendon1982's user avatar

sendon1982sendon1982

9,45456 silver badges43 bronze badges

If the file is large, you might want to use a FileStream for output, but that seems pretty much like it is the simplest process to do what you’re asking (and without more specificity i.e. on what types of changes / edits / deletions you’re trying to do, it’s impossible to determine what more complicated way might work).

answered May 4, 2009 at 21:34

Paul Sonier's user avatar

Paul SonierPaul Sonier

38.5k3 gold badges77 silver badges117 bronze badges

No reason to buffer the entire file.

Simply write each line as your read it, insert lines when necessary, delete lines when necessary, replace lines when necessary.

Fundamentally, you will not get around having to recreate the file wholesale, especially if it’s just a text file.

answered May 4, 2009 at 21:38

Will Hartung's user avatar

Will HartungWill Hartung

114k19 gold badges128 silver badges202 bronze badges

What kind of data is it? Do you control the format of the file?

If the file contains name/value pairs (or similar), you could have some luck with Properties, or perhaps cobbling together something using a flat file JDBC driver.

Alternatively, have you considered not writing the data so often? Operating on an in-memory copy of your file should be relatively trivial. If there are no external resources which need real time updates of the file, then there is no need to go to disk every time you want to make a modification. You can run a scheduled task to write periodic updates to disk if you are worried about data backup.

answered May 4, 2009 at 23:05

James Van Huis's user avatar

James Van HuisJames Van Huis

5,4351 gold badge26 silver badges25 bronze badges

In general you cannot edit the file in place; it’s simply a very long sequence of characters, which happens to include newline characters. You could edit in place if your changes don’t change the number of characters in each line.

answered May 4, 2009 at 21:34

lumpynose's user avatar

lumpynoselumpynose

9374 silver badges12 bronze badges

Can’t you use regular expressions, if you know what you want to change ? Jakarta Regexp should probably do the trick.

answered May 10, 2009 at 11:58

Valentin Rocher's user avatar

Although this question was a time ago posted, I think it is good to put my answer here.
I think that the best approach is to use FileChannel from java.nio.channels package in this scenario. But this, only if you need to have a good performance! You would need to get a FileChannel via a RandomAccessFile, like this:

java.nio.channels.FileChannel channel = new java.io.RandomAccessFile("/my/fyle/path", "rw").getChannel();

After this, you need a to create a ByteBuffer where you will read from the FileChannel.

this looks something like this:


java.nio.ByteBuffer inBuffer = java.nio.ByteBuffer.allocate(100);
int pos = 0;
int aux = 0;
StringBuilder sb = new StringBuilder();

while (pos != -1) {

    aux = channel.read(inBuffer, pos);
    pos = (aux != -1) ? pos + aux : -1;

    b = inBuffer.array();
    sb.delete(0, sb.length());

    for (int i = 0; i < b.length; ++i) {

         sb.append((char)b[i]);

    }

    //here you can do your stuff on sb

    inBuffer = ByteBuffer.allocate(100);

}

Hope that my answer will help you!

answered Apr 4, 2012 at 11:19

artaxerxe's user avatar

artaxerxeartaxerxe

6,23020 gold badges68 silver badges105 bronze badges

private static void modifyFile(String filePath, String oldString, String newString) {
    File fileToBeModified = new File(filePath);
    StringBuilder oldContent = new StringBuilder();
    try (BufferedReader reader = new BufferedReader(new FileReader(fileToBeModified))) {
        String line = reader.readLine();
        while (line != null) {
            oldContent.append(line).append(System.lineSeparator());
            line = reader.readLine();
        }
        String content = oldContent.toString();
        String newContent = content.replaceAll(oldString, newString);
        try (FileWriter writer = new FileWriter(fileToBeModified)) {
            writer.write(newContent);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

answered Feb 25, 2022 at 14:32

Dirceu Belem's user avatar

1

You can change the txt file to java by saving on clicking «Save As» and saving *.java extension.

answered May 11, 2017 at 10:11

UmaShankar's user avatar

UmaShankarUmaShankar

2234 silver badges14 bronze badges

Время прочтения
5 мин

Просмотры 5.6K

Случилось страшное! Мой смартфон nokia navigator 6110 скоропостижно скончался! Пришлось искать замену, причем хорошую и недорогую, ибо откуда у обычного программиста деньги на хороший телефон (громкий жалобный всхлип). В общем, после долгих поисков был выбран телефон nokia 2630. Вообщето телефон мне нужен только что бы звонить, писать смс и читать! Причем в основном именно читать, т.к. читать я люблю. На смартах все довольно просто, скачал книжку, перевел в txt формат закинул в смарт с установленным qreader’ом, и наслаждаешься. На обычных телефонах, прежде чем наслаждаться, необходимо перевести книгу в java приложение. Для этих целей существуют специальные программы конвертеры из txt в java. Ну собственно последние два дня я убил на то, что бы сделать чтение со своей мобилы удобным, и сейчас, я пожалуй поделюсь с вами накопленным опытом.

Как я тестил.

А я вообще человек не привередливый, все что мне нужно от книжки – это возможность ее читать… читать с комфортом, конечно. Знаю, вы скажите что с комфортом можно читать только настоящие бумажные книги, но кроме того, что я не привередливый, я еще и жадный, так что книги привык не покупать а скачивать, лишая бедных авторов последнего куска хлеба(без сарказма)… Я вообще думаю, что если количество таких людей как я будет увеличиваться, то скоро в книгах начнут рекламу выкладывать…
Так вот, что мне нужно от книги:

  • Возможность менять размер/цвет шрифта
  • Возможность менять цвет заднего фона
  • Возможность регулировки времени подсветки
  • Возможность разворачивать книгу на весь экран
  • Статусная строка показывающая в какой части книги я нахожусь (желательно в процентах) и время
  • Переход на нужную мне часть книги (тоже проценты)
  • При нажатии на «Вниз» книга должна пролистываться на страничку, а не на строчку
  • Книга должна открываться на том же месте, на котором я закончил
  • Отсутствие тормозов и подвисаний

Shasoft eBook v3.1.10

Прога не понравилась. Книга на телефоне запускается примерно минуту, да и то через раз! Дико тормозит. При нажатии кнопки «Вниз», текст опускается на строку, причем перед этим «думает» секунд 10.Настроить пролистывание экрана а не строки (так чтобы при нажатии на стрелку «вниз» текст проматывался на экран, а не на строчку) не получилось, зато он пролистывается на высоту экрана при нажатии на кнопку «6». Время подсветка экрана не регулируется, экран гаснет секунд через 15. Сам шрифт какой то корявый. Размеров шрифта всего три, причем тот который «маленький» — слишком маленький, а тот который «средний» — уже слишком большой. Но самое ужасное – это функция переход! Тоесть когда я запустил книгу, которую не дочитал на скоропостижно скончавшемся смарте, и хотел начать с того момента откуда закончил читать, я обалдел! Обычно переход осуществляется попроцентно, ну например перейти к 70тому проценту, а вот в Shasoft eBook, это делается посимвольно! Я знаю, что остановился примерно проценте на 72-ом, но какой это символ… оказалось что 610751-ый… Причем перейти к нему сразу не получается, приложение виснет, так что я сначала перешел 2048, примерно минуты за две, именно столько прога думает при переходе на две тысячи символов, потом до 4069 ну и так, через полтора часа я добрался до нужной мне главы книги.
В общем, для комфортного чтения не годится, процйесс происходит примерно так: прочел половину экрана, погасла подсветка, нажал «5», прочел вторую половину, нажал «6» что бы промотать страницу. Неудобно!
Моя оценка 4 из 10.

TequilaCat Book Reader (TCBR) v2.2.13

Уже гораздо лучше! Инсталляция не требуется. Скачал, распаковал, запустил. Есть настройки для большого количества телефонов, можно самому задать размер файла и текстового блока. Можно засунуть в один jar файл несколько книг, разбить их по главам. В общем, все что нужно, в том числе и пролистывание, и подсветка настраивается. Прога мне понравилась, но есть и минсы. Я например люблю читать зеленые буквы на черном фоне, мне так удобно. Это можно настроить при конвертировании, но в уже сконвертированной книге (когда она в телефоне) цвета шрифтов и бэкграунда менять нельзя. При конвертировании вообще можно задать сколько угодно настроек шрифтов, любого цвета и размера, а потом при чтении переключать между ними, но изменять их в телефоне уже не получиться. И еще мне нравится когда внизу есть статусная строка, где отображается сколько процентов прочитано и время. В TequilaCat Book Reader эта строка есть, ее можно поставить, можно убрать, но вот только она идет прям поверх последней строки текста, тем же цветом и без бэкграунда, а значит сливается с последней строкой, и ее приходиться убирать. В итоге я ее убрал, и когда хочу узнать время, и прочитанный процент, зажимаю единицу, вся эта инфа выводиться в удобном читабельном виде, как отдельный экран, отпуская единицу, я вновь возвращаюсь к тексту книги.
Моя оценка 8 из 10

mjBook 4.7

Вот это, уже гораздо ближе к теме! Прога очень старая, я пользовал ее еще до покупки своего первого смарта. В общем в ней есть почти все, и даже больше. Подсветка регулируется, размер и цвет шрифтов – тоже изменяются. Цвет заднего фона выставляется… Правда вот с цветами немного неудобно. Их нужно задавать в rgb формате… ну для зеленного и черного проблем нет, а задать какой нить другой цвет, посложнее – уже проблематично, хотя такой подход, разумеется, более гибкий, ибо в нашем распоряжении все 16 миллионов цветов. И все таки, не каждый ведь знает что за rgb… Статусной строки нету, и это минус, когда читаешь, время летит быстро, и мне бы хотелось иметь это время перед глазами. Зато если нажать на «0», появиться информация о времени, дате, о том сколько раз открывалась книга, и сколько времени я ее читаю… Прочитанный процент можно узнать зайдя в меня «Navigator», вообще оно надо для перехода в какую-то часть книги, но по умолчанию стоит прочитанный процент… так что все это немного неудобно, но думаю что получше у вышеописанных прог. Итак, из минусов у этой программы – только отсутствие статусной строки. Неплохо!
Моя оценка 9 из 10

ReadManiac v2.5.2

Думаю это то что вам нужно… во всяком случае я остановился на этой программе… по удобству, почти токая же как и предыдущая, но очень радует возможность открывать текстовые файлы с диска телефона…. То есть можно один раз закачать ReadManiac в телефон, а потом просто закачивать txt-шники и открывать (так написано, но я не пробовал, у меня телефон просто не принимает по блутусу txt без сопутствующего ПО, кто пробовал отпишитесь в комментах). Для меня это не столь важно, для меня важен комфорт чтения, вот и остановимся на нем. Итак, все вроде есть, по всем пунктам все здорово. Цвет шрифта и заднего фона выбирается из предустановленных, никаких rgb. Есть статусная строка со временем и … Текущей страницей, что не очень удобно, я все же привык к процентам (да это и правильно, процентов всего 100, а вот страниц в моей книжке оказалось 5046, хотя кому как, для меня это минус). И еще книга совсем немного подтормаживает… ну или скажем так, mjBook работает быстрее.
Моя оценка 9 из 10

От себя

Я остановил свой выбор на ReadManiak, именно эта программа устраивает меня по всем пунктам, кроме, конечно, измерения книги в страницах, а не в процентах, хотя если бы в mjbook была статусная строка, то я пользовался бы ей.

P.S.

Все проги бесплатные. Скачать можно тут.

Я не могу понять, почему мой код отказывается изменять расширение моего txt-файла на java.

Вот мой код:

public static void main(String[] arg) {

 File file  = new File("file.txt"); //File I want to change to .java
 File file2 = new File("file.java"); 

 boolean success = file.renameTo(file2); //boolean to check if successful


 if (success == true)
 {
     System.out.println("file extension change successful");

 }else
 {
     System.out.println("File extension change failed");
 }

}// main

Он всегда каждый раз выводит сообщение «Ошибка расширения файла», и я, честно говоря, не понимаю, почему. Я начинаю подозревать, что это могут быть разрешения на моем компьютере. Я использую компилятор Eclipse.

< Сильный > ИСПРАВЛЕНО:

ПРИЧИНА ПРОБЛЕМЫ : Я поместил файл file.txt , который хотел изменить, в папку пакета внутри папки моего проекта. C: Users Acer workspace MyProjectName src MyPackageName . Как следствие, система не может найти файл.

РЕШЕНИЕ: Я просто переместил файл file.txt в основную папку проекта; C: Users Acer workspace MyProjectName , и это устранило проблему. Когда я запускаю свою программу, она возвращается

расширение файла успешно изменено

.

Спасибо за вашу помощь. Я очень ценю это.

2 ответа

Лучший ответ

Исходный файл, то есть file.txt , должен существовать по указанному пути (в вашем случае он должен находиться внутри папки проекта eclipse) и не иметь файла с именем конечного файла, то есть file.java должен существовать на указанном пути. После выполнения кода он выдаст расширение файла успешно , а file.txt исчезнет, ​​а его содержимое будет перенесено в file.java


1

saravan kumar
5 Ноя 2015 в 05:45

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

Моя рекомендация, если вы используете Java 7, — переключиться на использование функций файла nio, которые были добавлены в этой версии. После этого вы не только будете использовать более новый и надежный API, но и сможете лучше передавать сообщения о том, почему ваша копия не работает. Вот код, эквивалентный опубликованному вами коду.

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class MoveFile {
  public static void main(String[] arg) {
    Path file  = Paths.get("file.txt"); //File I want to change to .java
    Path file2 = Paths.get("file.java");

    try {
      Files.move(file, file2);
      System.out.println("file extension change successful");
    } catch (IOException e) {
       System.out.println("File extension change failed: " + e.getMessage());
       e.printStackTrace();
    }
  }
}

Для осведомленности Oracle предоставляет хорошую справочную страницу для преобразования устаревшего файла. код к коду nio.


1

M. Justin
5 Ноя 2015 в 04:39

Понравилась статья? Поделить с друзьями:
  • Как изменить расширение tif на jpg
  • Как изменить расширение rar на zip
  • Как изменить расширение rar на iso
  • Как изменить расширение png на jpg
  • Как изменить расширение ogg на mp3