Top.Mail.Ru
Ответы

Как оформить чтение строки из файла в java?

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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
 import javax.swing.*; 
import java.awt.*; 
import java.awt.event.FocusEvent; 
import java.awt.event.FocusListener; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
  
public class ReplacingTextDemo { 
    private static final int WIDTH = 480; 
    private static final int HEIGHT = 320; 
    private static final int GAP = 8; 
    private static final int INNER_WIDTH = WIDTH - 2 * GAP; 
    private static final int SMALL_HEIGHT = 24; 
    private static final int LARGE_HEIGHT = 100; 
  
    public static void main(String[] args) { 
        JFrame frame = new JFrame("Замена текста"); 
        
 frame.setLayout(new FlowLayout(FlowLayout.LEFT, GAP, GAP)); 
 frame.getContentPane().setPreferredSize(new Dimension(WIDTH, HEIGHT)); 
  
        // Поле для текста 
        JTextArea inputArea = new JTextArea("Мама мыла раму"); 
 inputArea.setLineWrap(true); 
  
        // Поле для буквы, которую нужно заменить 
        JTextField charField = new JTextField("а", 5); 
 charField.setEditable(false); 
 charField.setHorizontalAlignment(JTextField.CENTER); 
        
 addColoredFocus(charField, Color.ORANGE); 
  
       
        JTextArea resultArea = new JTextArea(""); 
 resultArea.setEditable(false); 
 resultArea.setLineWrap(true); 
  
 frame.add(fullWidth(new JLabel("Введите текст:"))); 
 frame.add(high(new JScrollPane(inputArea))); 
 frame.add(new JLabel("Введите букву для замены:")); 
 frame.add(charField); 
 frame.add(fullWidth(new JLabel("Результат:"))); 
 frame.add(high(new JScrollPane(resultArea))); 
  
        // Чтобы не повторять код замены букв на решетки, вынесем этот код в Runnable. 
        // Это не обязательно, но мне так больше нравится. 
        Runnable replaceAction = () -> resultArea.setText(inputArea.getText().replace(charField.getText(), "#")); 
        // Сразу запустим замену, чтобы результат был виден при запуске программы 
 replaceAction.run(); 
  
        
        charField.addKeyListener(new KeyAdapter() { 
            @Override 
            public void keyTyped(KeyEvent e) { 
                
                if (e.getKeyChar() >= 32) { 
                    
                    charField.setText(String.valueOf(e.getKeyChar())); 
                   
                    replaceAction.run(); 
                } 
            } 
        }); 
  
        
        inputArea.addKeyListener(new KeyAdapter() { 
            @Override 
            public void keyReleased(KeyEvent e) { 
                replaceAction.run(); 
            } 
        }); 
  
        frame.pack(); 
        frame.setResizable(false); 
        frame.setLocationRelativeTo(null); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        frame.setVisible(true); 
    } 
  
    private static void addColoredFocus(JTextField field, Color color) { 
        Color defaultColor = field.getBackground(); 
        field.addFocusListener(new FocusListener() { 
            @Override 
            public void focusGained(FocusEvent e) { 
                field.setBackground(color); 
            } 
  
            @Override 
            public void focusLost(FocusEvent e) { 
                field.setBackground(defaultColor); 
            } 
        }); 
    } 
  
    
    private static JComponent fullWidth(JComponent c) { 
        c.setPreferredSize(new Dimension(INNER_WIDTH, SMALL_HEIGHT)); 
        return c; 
    } 
  
    private static JComponent high(JComponent c) { 
        c.setPreferredSize(new Dimension(INNER_WIDTH, LARGE_HEIGHT)); 
        return c; 
    } 
} 
 
Дополнен

/*
class reverse{
public static String reverse(String inputString){
int stringLength = inputString.length();
String result = "";
for (int i = 0; i < stringLength; i++){
result = inputString.charAt(i) + result;
}
return result;
}
}
*/

По дате
По рейтингу
Аватар пользователя
Профи

Чтение строки из файла в Java можно оформить с помощью класса java.io .BufferedReader. Вот пример кода:

import java.io .BufferedReader;
import java.io .FileReader;
import java.io .IOException;

public class ReadFromFile {
public static void main(String[] args) {
String fileName = "file.txt";
try (BufferedReader br = new BufferedReader(new FileReader(fileName))) {
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.err.format("IOException: %s%n", e);
}
}
}
В этом примере мы создаем объект BufferedReader и передаем ему объект FileReader, который содержит имя файла для чтения. Мы затем используем цикл while для чтения каждой строки файла и выводим ее на экран. Важно также обработать возможные исключения, которые могут возникнуть при чтении файла, используя блок try-catch.

Аватар пользователя
Мудрец

Возможно как-то так я не шарю по java и не проверял данный код(не описан полный функционал) + это не полный код а часть которую нужно добавить

12345678910111213141516171819202122232425262728293031323334353637
 import java.io .BufferedReader; 
import java.io .FileReader; 
import java.io .IOException;
public static void reprevers(String fileName, boolean rev) 
{ 
    try (BufferedReader br = new BufferedReader(new FileReader(fileName))) { 
    String result; 
    String lines; 
    while ((lines = br.readLine()) != null) { 
        if(rev == 0){ 
            result += lines.replace(charField.getText(), "#") + "\n"; 
        } 
        else 
        { 
            result += reverse(lines.replace(charField.getText(), "#")) + "\n"; 
        } 
            
    } 
    } catch (IOException e) { 
        System.err.format("IOException: %s%n", e); 
    } 
    return result; 
} 
 
public static String reverse(String inputString){ 
    int stringLength = inputString.length(); 
    String result = ""; 
    for (int i = 0; i < stringLength; i++){ 
        result = inputString.charAt(i) + result; 
    } 
    return result; 
} 
        // Чтобы не повторять код замены букв на решетки, вынесем этот код в Runnable.  
        // Это не обязательно, но мне так больше нравится.  
        Runnable replaceAction = () -> resultArea.setText(reprevers('file.txt', 1);  
        // Сразу запустим замену, чтобы результат был виден при запуске программы  
        replaceAction.run();