Como trabalhar com arquivos e entrada/saída em Java
Fonte:
Médio Este tutorial explica como criar, ler, escrever e excluir arquivos em Java. Você também aprenderá como funcionam as classes File , InputStream e OutputStream .
Introdução
Em Java, os arquivos são representados pela classe
File . A classe
File fornece métodos para criar, ler, gravar e excluir arquivos. Entrada/saída (E/S) é o processo de transferência de dados entre um programa e uma fonte externa, como um arquivo, soquete de rede ou console. Java fornece muitas classes para entrada/saída, incluindo as classes
InputStream e
OutputStream .
Criando arquivos
Para criar um arquivo, você pode usar o método
File.createNewFile() . Ele criará um novo arquivo se ainda não existir um arquivo com o mesmo nome. Se tal arquivo já existir, o método
createNewFile() lançará um
IOException . Aqui está um exemplo de como criar um novo arquivo chamado
myfile.txt no diretório atual:
File myFile = new File("myfile.txt");
myFile.createNewFile();
Lendo arquivos
Para ler um arquivo em Java, você pode usar a classe
FileInputStream . Ele fornece métodos para leitura de bytes de um arquivo. Para ler o conteúdo de um arquivo, você deve usar o método
read() . Este método lê um byte de um arquivo e retorna o valor do byte. Por exemplo, o código a seguir lê o conteúdo do arquivo
myfile.txt e o imprime no console:
File myFile = new File("myfile.txt");
FileInputStream inputStream = new FileInputStream(myFile);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
System.out.print(new String(buffer, 0, bytesRead));
}
inputStream.close();
Gravando arquivos
Para gravar em um arquivo, você pode usar a classe
FileOutputStream . Ele fornece métodos para gravar bytes em um arquivo. Para escrever o conteúdo de uma string em um arquivo, use o método
write() . Este método grava o número especificado de bytes de uma matriz especificada em um arquivo. Aqui está um exemplo de como a string “Hello, world!” é escrita. para o arquivo
meuarquivo.txt :
File myFile = new File("myfile.txt");
FileOutputStream outputStream = new FileOutputStream(myFile);
byte[] buffer = "Hello, world!".getBytes();
outputStream.write(buffer);
outputStream.close();
Excluindo arquivos
Para excluir um arquivo em Java, você deve usar o método
File.delete() . Se o arquivo que você deseja excluir não existir, o método
delete() retornará
false . Aqui está um exemplo de código que exclui o arquivo
myfile.txt :
File myFile = new File("myfile.txt");
myFile.delete();
Conclusão
Neste post, discutimos os fundamentos do trabalho com arquivos e E/S Java. Você aprendeu como criar, ler, gravar e excluir arquivos. Você também aprendeu sobre a classe
File e
as classes InputStream e
OutputStream .
Métodos utilitários da classe Objects - como trabalhar com eles
Fonte:
Inside Java Com este post, você irá aprimorar seu conhecimento sobre os diversos métodos fornecidos na classe Objects . A classe
Objects em Java possui muitos métodos utilitários que facilitam a execução de uma variedade de operações em objetos.
A classe Objects passou por diversas atualizações nas versões do JDK : houve atualizações muito significativas no JDK 8 e 9, e pequenas atualizações no JDK 16 e 19. Vejamos como você pode usar
a classe Objects .
Comparação de objetos
Objects oferece várias opções para comparar os valores de dois objetos. O principal benefício de usar
a implementação Objects é a segurança contra ocorrências
nulas .
é igual a()
Abaixo está um exemplo de comparação de dois registros.
record RaceTime(String runnerName, Duration time) {}
RaceTime nullValue = null;
RaceTime billy =
new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime copyOfbilly =
new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));
nullValue.equals(billy);
Objects.equals(nullValue, billy);
Objects.equals(billy, nicolai);
Objects.equals(billy, copyOfbilly);
deepEquals()
Na classe
Objects , você também pode usar deepEquals() para comparar dois arrays .
Ao contrário de equals() regular , isso comparará valores armazenados em arrays, o que deve levar a resultados mais consistentes. Fundamentalmente este método passa por
Arrays.deepEquals() .
record RaceTime(String runnerName, Duration time) {}
RaceTime billy =
new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));
RaceTime[] raceTimes1 = new RaceTime[] { billy, nicolai };
RaceTime[] raceTimes2 = new RaceTime[] { billy, nicolai };
Objects.equals(raceTimes1, raceTimes2);
Objects.deepEquals(raceTimes1, raceTimes2);
comparar()
Objects também possui um método
compare() , que pode receber dois objetos e
um Comparator<T> . O método
compare() é um dos poucos métodos
null -unsafe em Objects porque não tem retorno aceitável se um de seus argumentos for
null .
record RaceTime(String runnerName, Duration time) {}
class RaceTimeComparator implements Comparator<RaceTime> {
@Override
public int compare(RaceTime o1, RaceTime o2) {
return o1.time.compareTo(o2.time);
}
}
RaceTime billy =
new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));
Objects.compare(billy, nicolai, new RaceTimeComparator());
Objects.compare(null, nicolai, new RaceTimeComparator());
String e HashCode
A classe Objects fornece métodos para converter um objeto em valores String e HashCode . Novamente, a principal vantagem desses métodos é que eles estão protegidos contra ocorrências nulas .
Converter em string
Um dos métodos mais interessantes é
toString(obj, nullDefault) , que fornece um valor padrão se ocorrer um erro. Isso significa que
toIdentityString(obj) retorna
toString() e
hashCode() dos objetos passados como se nenhum desses métodos tivesse sido substituído.
record RaceTime(String runnerName, Duration time) {}
RaceTime nullValue = null;
RaceTime billy =
new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));
Objects.toString(billy);
Objects.toString(nullValue);
Objects.toString(nullValue, "Did not finish");
Objects.toIdentityString(billy);
Converter para HashCode
Objects também fornece métodos para converter um objeto em seu valor de código hash.
record RaceTime(String runnerName, Duration time) {}
RaceTime nullValue = null;
RaceTime billy =
new RaceTime("Billy Korando", Duration.of(90, ChronoUnit.SECONDS));
RaceTime nicolai =
new RaceTime("Nicolai Parlog", Duration.of(180, ChronoUnit.SECONDS));
Objects.hashCode(nullValue);
Objects.hashCode(billy);
Objects.hash(billy, nicolai);
Verificando nulo
A classe
Objects fornece vários métodos para verificar e tratar
null .
Lançando NullPointException em null
O método
requireNonNull(obj) lançará
uma NullPointException se o valor passado for
null .
record RaceTime(String runnerName, Duration time) {
RaceTime{
runnerName = Objects.requireNonNull(runnerName);
time = Objects.requireNonNull(time);
}
}
Lançando NullPointException em null com uma mensagem para o usuário
O método
requireNonNull(obj, String) lançará um erro
NullPointException com uma mensagem para o usuário se o valor passado for
null .
record RaceTime(String runnerName, Duration time) {
RaceTime{
runnerName = Objects.requireNonNull(runnerName, "runner name required!");
time = Objects.requireNonNull(time, "race time required!");
}
}
Retornar valor padrão para nulo
O método
requireNonNullElse(obj, defaultValue) retornará o
defaultValue passado se
obj for
null .
record RaceTime(String runnerName, Duration time) {
RaceTime{
runnerName = Objects.requireNonNullElse(runnerName, "John Smith");
time = Objects.requireNonNullElse(time, Duration.ZERO);
}
}
Usando fornecedores
A classe
Objects também fornece os métodos requireNonNull(obj, Supplier<String>) e
T requireNonNullElseGet(T, Supplier<T>) , que podem ser usados para fornecer uma mensagem ou um valor padrão. Eles só deverão ser usados se a criação de uma mensagem ou valor padrão tiver um impacto significativo no desempenho.
record RaceTime(String runnerName, Duration time) {
static Supplier<String> noNameMsgSupplier = () -> "runner name required!";
static Supplier<String> noTimeMsgSupplier = () -> "race time required!";
RaceTime{
runnerName = Objects.requireNonNull(runnerName, noNameMsgSupplier);
time = Objects.requireNonNull(time, noTimeMsgSupplier);
}
}
record RaceTime(String runnerName, Duration time) {
static Supplier<String> noNameValueSupplier = () -> "John Smith";
static Supplier<Duration> noTimeValueSupplier = () -> Duration.ZERO;
RaceTime{
runnerName = Objects.requireNonNullElseGet(runnerName, noNameValueSupplier);
time = Objects.requireNonNullElseGet(time, noTimeValueSupplier);
}
}
Verificação nula preditiva
Objects fornece verificação
de nulos para uso em predicados, embora também possa ser usado em outros cenários.
record RaceTime(String runnerName, Duration time) {}
RaceTime nullValue = null;
Objects.nonNull(nullValue);
Objects.isNull(nullValue);
Verificação de índice
Finalmente, a classe
Objects oferece diversas opções para verificar a posição do índice ao percorrer
um File ,
String ,
Collection ou objeto semelhante. Alguns desses métodos foram adicionados recentemente ao JDK 16.
int checkIndex(int index, int length)
int checkFromToIndex(int fromIndex, int toIndex, int length)
int checkFromIndexSize(int fromIndex, int size, int length)
long checkIndex(long index, long length)
long checkFromToIndex(long fromIndex, long toIndex, long length)
long checkFromIndexSize(long fromIndex, long size, long length)
GO TO FULL VERSION