especificadas de linhas num arquivo,
Isto mesmo que você leu, é possível ler
apenas uma única linha do arquivo,
ou ele por completo.
A entrada de dados é feita num único textfield,
onde se alterna para o número inicial e final
escolhido pelo usuário.
Mas sua inteligencia não permite que o número final
seja menor que o inicial, enviando uma mensagem
para o usuário no próprio textarea que é usado
para imprimir as linhas selecionadas para leitura.
No menu de três opções escolhemos o que queremos fazer.
Na opção "Arquivo", o programa mostra o tamanho do arquivo
em bytes e o total de linhas que o mesmo possui.
Na opção "Leitura", inserimos um número para início e fim
para a quantidades de linhas que queremos ler,
e na opção "Sair" o programa é fechado rapidamente.
Veja abaixo uma imagem do programa em execução:
Veja abaixo um vídeo do programa em execução:
Veja abaixo o código do programa:
//JAVAFX - SELECIONANDO LINHAS EM
ARQUIVO
//28/11/2018 - 20:54
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.stage.Stage;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.VBox;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import javafx.scene.layout.BorderPane;
import java.io.IOException;
import javafx.scene.canvas.Canvas;
import javafx.scene.canvas.GraphicsContext;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.paint.Color;
import javafx.scene.control.Menu;
import javafx.scene.control.MenuBar;
import javafx.scene.control.MenuItem;
import javafx.scene.text.Font;
import javafx.scene.text.FontPosture;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.scene.control.TextField;
import javafx.scene.control.TextFormatter;
import javafx.scene.control.TextFormatter.Change;
import javafx.scene.layout.HBox;
import java.util.function.UnaryOperator;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import java.awt.Toolkit;
import javafx.scene.input.KeyCodeCombination;
import javafx.scene.input.KeyCombination;
public class PROJETO extends Application {
static TextField textField_1 = new TextField ( );
static HBox hbox_1 = new HBox ( textField_1 );
static TextArea text = new TextArea ( );
static Text t_1 = new Text ( );
static Text t_2 = new Text ( );
static Text t_3 = new Text ( );
static Text t_4 = new Text ( );
static Text t_5 = new Text ( );
static Text t_6 = new Text ( );
static Text t_7 = new Text ( );
static Text t_8 = new Text ( );
static Canvas canvas = new Canvas ( );
static GraphicsContext ctx = canvas.getGraphicsContext2D ( );
static VBox vbox = new VBox ( );
static GridPane grid = new GridPane ( );
static BorderPane root = new BorderPane ( );
static Scene scene = new Scene ( vbox, 600, 300 );
static int a_1 = -1, qnt = 0;
public static File file = new File ( "H:\\eclipse
luna_two\\"
+ "PROJETO\\PROJETO\\src\\Harpa
crista.txt" );
static boolean x = false, existe = file.exists ( );
static int [ ] vet = new int [ 100 ];
static MenuBar menuBar = new MenuBar ( );
static Menu arq = new Menu ( "Arq" );
static MenuItem pesq = new MenuItem ( "Arquivo" );
static MenuItem ler = new MenuItem ( "Leitura" );
static MenuItem sair = new MenuItem ( "Sair" );
/*========================================================================*/
public static long inf_Arquivo ( ) throws IOException {
int SIZE = 1;
String [ ] str = new String [ SIZE ];
long size = tamanho ( );
BufferedReader f = new BufferedReader ( new FileReader ( file ) );
int a = 0, i = 0;
while ( ( str [ i ] = f.readLine ( ) ) != null ) {
a++;
}
f.close ( );
text.appendText ( "" );
text.clear ( );
text.setVisible ( false );
textField_1 .setVisible ( false );
t_2.setVisible ( false );
t_3.setVisible ( false );
t_4.setVisible ( true );
t_5.setVisible ( true );
t_6.setVisible ( true );
t_7.setVisible ( true );
t_4.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
FontPosture.ITALIC, 16 ) );
t_5.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
FontPosture.ITALIC, 16 ) );
t_6.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
FontPosture.ITALIC, 16 ) );
t_7.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
FontPosture.ITALIC, 16 ) );
t_4.setTranslateX ( 100 );
t_4.setTranslateY ( -180 );
t_4.setFill ( Color.BLUE );
t_4.setText ( "Tamanho do
arquivo em bytes" );
t_5.setTranslateX ( 360 );
t_5.setTranslateY ( -203 );
t_5.setFill ( Color.RED );
t_5.setText ( "" + size );
t_6.setTranslateX ( 100 );
t_6.setTranslateY ( -190 );
t_6.setFill ( Color.BLUE );
t_6.setText ( "Total de
linhas do arquivo" );
t_7.setTranslateX ( 340 );
t_7.setTranslateY ( -213 );
t_7.setFill ( Color.RED );
t_7.setText ( "" + a );
vbox.getChildren ( ).addAll ( t_4, t_5, t_6, t_7 );
return file.length ( );
}
/*========================================================================*/
private final static long tamanho ( ) throws IOException {
return file.length ( );
}
/*========================================================================*/
public static void arqExist ( ) {
if ( existe ) {
} else {
x = true;
t_8.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
FontPosture.ITALIC, 16 ) );
t_8.setTranslateX ( 140 );
t_8.setTranslateY ( -213 );
t_8.setFill ( Color.BLACK );
t_8.setText ( "O arquivo não
foi encontrado.");
}
}
/*========================================================================*/
public static void Menu ( ) {
pesq.setOnAction ( new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent e ) {
try {
text.appendText ( "" );
text.clear ( );
arqExist ( );
if ( x == false )
inf_Arquivo ( );
} catch ( IOException e1 ) {
// TODO
Auto-generated catch block
e1.printStackTrace();
}
}
} );
/*=====================================================*/
ler.setOnAction ( new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent e ) {
text.appendText ( "" );
text.clear ( );
arqExist ( );
if ( x == false )
textFieldArr ( );
}
} );
/*=====================================================*/
sair.setOnAction ( new EventHandler < ActionEvent > ( ) {
@Override
public void handle ( ActionEvent e ) {
System.exit ( 0 );
}
} );
/*=====================================================*/
pesq.setAccelerator ( new KeyCodeCombination ( KeyCode.E,
KeyCombination.CONTROL_DOWN ) );
ler.setAccelerator ( new KeyCodeCombination ( KeyCode.F,
KeyCombination.CONTROL_DOWN ) );
sair.setAccelerator ( new KeyCodeCombination ( KeyCode.C,
KeyCombination.CONTROL_DOWN ) );
arq.getItems ( ).addAll ( pesq, ler, sair );
menuBar.getMenus ( ).add ( arq );
}
/*========================================================================*/
public static void limitTextField ( TextField textField, int limit ) {
UnaryOperator < Change > textLimitFilter = change -> {
if ( change.isContentChange ( ) ) {
int newLength = change.getControlNewText ( ).length ( );
if ( newLength > limit ) {
String trimmedText = change.getControlNewText ( )
.substring ( 0, limit );
change.setText ( trimmedText );
int oldLength = change.getControlText ( ).length ( );
change.setRange ( 0, oldLength );
}
}
return change;
};
textField.setTextFormatter ( new TextFormatter < Object > (
textLimitFilter ) );
}
/*========================================================================*/
public static int fill_Array ( ) throws IOException {
int a = 0, i = 0, inicio = 0, fim = 0;
int SIZE = 1;
StringBuilder st = new StringBuilder ( );
String [ ] str = new String [ SIZE ];
text.appendText ( "" );
text.clear();
text.setVisible ( true );
textField_1 .setVisible ( false );
t_2.setVisible ( false );
t_3.setVisible ( false );
textField_1 .setVisible ( false );
for ( i = 0; i < 1; i++ ) {
inicio = vet [ 0 ];
fim = vet [ 1 ];
}
if ( fim < inicio ) {
text.setStyle ( "-fx-font-style:
italic;"
+ " -fx-font-weight: bolder;"
+ " -fx-font-size: 15px;"
+ "-fx-alignment: center;"
+ "-fx-text-fill: black" );
text.appendText ("\n\t\t\t\tO número
de linha final digitado\n"
+ "\t\t\t\té
menor que o inicial.\n\n"
+ "\t\t\t\t\t\tTente
novamente.");
}
System.out.printf ( "Início =>
%d\nFim => %d", inicio, fim );
BufferedReader f = new BufferedReader ( new FileReader ( file ) );
i = 0;
while ( ( str [ i ] = f.readLine ( ) ) != null ) {
a++;
if ( a >= inicio && a <= fim ) {
st.append ( a + " " + str [ i ] + "\n" );
}
}
text.appendText ( "" + st );
f.close ( );
return 0;
}
/*========================================================================*/
public static int textFieldArr ( ) {
a_1 = -1;
text.setVisible ( false );
t_4.setVisible ( false );
t_5.setVisible ( false );
t_6.setVisible ( false );
t_7.setVisible ( false );
textField_1.setVisible ( true );
t_2.setVisible ( true );
// Usando fonte em italic
t_2.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
FontPosture.ITALIC, 16 ) );
// Criando moldura em torno da janela
vbox.setStyle ( "-fx-padding:
5;"
+ "-fx-border-style: solid inside;"
+ "-fx-border-width: 4;"
+ "-fx-border-insets: 5;"
+ "-fx-border-radius: 12;"
+ "-fx-border-color: black;" );
// Posiciona o
textfield no local escolhido
hbox_1.setPadding ( new Insets ( -165, 0, 10, 345 ) );
//Limita o textfield para no máximo cinco
colunas
textField_1.setPrefColumnCount ( 5 );
//Insere uma pequena mensagem ao usuário
textField_1.setPromptText ("início");
t_1.setTranslateX ( 100 );
t_1.setTranslateY ( -210 );
t_3.setVisible ( false );
t_2.setTranslateX ( 160 );
t_2.setTranslateY ( -160 );
t_2.setFill ( Color.BLACK );
t_2.setText ( "Número de
linha inicial" );
textField_1.setOnKeyPressed ( new EventHandler < KeyEvent > ( ) {
@Override
public void handle ( KeyEvent event ) {
//Limita o textfield
para no máximo
//cinco dígitos em sua
entrada
limitTextField ( textField_1, 5 );
// convertendo string
para inteiro
if ( event.getCode ( ) == KeyCode.ENTER ) {
//qnt recebe a entrada
do textfield
//convertida para
inteiro
qnt = Integer.parseInt ( textField_1.getText ( ) );
// Usando fonte em
italic
t_3.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
FontPosture.ITALIC, 16 ) );
if ( qnt > -1 && qnt <= 18195 ) {
t_1.setTranslateX ( 100 );
t_1.setTranslateY ( -215 );
t_2.setVisible ( false );
t_3.setVisible ( true );
t_3.setTranslateX ( 165 );
t_3.setTranslateY ( -180 );
t_3.setFill ( Color.BLACK );
t_3.setText ( "Número de
linha final" );
a_1++;
vet [ a_1 ] = qnt;
textField_1.clear ( );
try {
if ( a_1 == 1 )
fill_Array ( );
} catch ( IOException e ) {
// TODO
Auto-generated catch block
e.printStackTrace();
}
}
}
}
} );
vbox.getChildren ( ).addAll ( hbox_1, t_2, t_3 );
return qnt;
}
/*========================================================================*/
public static int Text_Area ( ) {
grid.add ( text, 0, 0 );
grid.setMinHeight ( 220 );
text.setTranslateY ( 30 );
text.setStyle ( "-fx-font-style:
italic;"
+ " -fx-font-weight: bolder;"
+ " -fx-font-size: 15px;"
+ "-fx-alignment: center;"
+ "-fx-text-fill: blue" );
return 0;
}
/*========================================================================*/
@Override
public void start ( Stage stage ) throws Exception {
// Usando fonte em
italic
t_1.setFont ( Font.font ( "Helvetica", FontWeight.BOLD,
FontPosture.ITALIC, 16 ) );
stage.setTitle ( "JAVAFX -
SELECIONANDO LINHAS EM ARQUIVO" );
// Criando moldura em torno da janela
vbox.setStyle ( "-fx-padding:
5;"
+ "-fx-border-style: solid inside;"
+ "-fx-border-width: 4;"
+ "-fx-border-insets: 5;"
+ "-fx-border-radius: 12;"
+ "-fx-border-color: blue;" );
t_1.setTranslateX ( 100 );
t_1.setTranslateY ( -220 );
t_1.setFill ( Color.RED );
t_1.setText ( "JAVAFX -
SELECIONANDO LINHAS EM ARQUIVO" );
Menu ( );
Text_Area ( );
text.setVisible ( false );
root.setTop ( menuBar );
vbox.getChildren ( ).addAll ( root, grid, t_1, t_8 );
stage.setScene ( scene );
stage.show ( );
}
/*========================================================================*/
public static void main ( String [ ] args ) {
launch ( args );
}
}
Nenhum comentário:
Postar um comentário
Observação: somente um membro deste blog pode postar um comentário.