🎯 Exemplos recomendados
Balanced sample collections from various categories for you to explore
Exemplos de Operações de Arquivo Android Java
Exemplos de operações de arquivo Android Java incluindo leitura/escrita de arquivo de texto, copiar/mover, travessia de diretório e validação de arquivo
💻 Leitura/Escrita de Arquivo de Texto java
🟢 simple
⭐⭐
Ler e escrever arquivos de texto com várias opções de codificação e tratamento de erros
⏱️ 20 min
🏷️ java, android, file operations, io
Prerequisites:
Basic Java knowledge, Android SDK
// Android Java Text File Read/Write Examples
// Using Android Context and Java IO
import android.content.Context;
import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.List;
// 1. Basic Text File Writing
public class TextFileWriter {
private Context context;
public TextFileWriter(Context context) {
this.context = context;
}
// Write simple text to internal storage
public void writeText(String filename, String text) {
try {
FileOutputStream output = context.openFileOutput(filename, Context.MODE_PRIVATE);
output.write(text.getBytes(StandardCharsets.UTF_8));
output.close();
System.out.println("Text written to: " + filename);
} catch (Exception e) {
System.out.println("Error writing file: " + e.getMessage());
}
}
// Write text with specific encoding
public void writeText(String filename, String text, Charset charset) {
try {
FileOutputStream output = context.openFileOutput(filename, Context.MODE_PRIVATE);
output.write(text.getBytes(charset));
output.close();
System.out.println("Text written with " + charset.name() + " to: " + filename);
} catch (Exception e) {
System.out.println("Error writing file: " + e.getMessage());
}
}
// Append text to existing file
public void appendText(String filename, String text) {
try {
FileOutputStream output = context.openFileOutput(filename, Context.MODE_APPEND);
output.write(text.getBytes(StandardCharsets.UTF_8));
output.close();
System.out.println("Text appended to: " + filename);
} catch (Exception e) {
System.out.println("Error appending: " + e.getMessage());
}
}
// Write text with line endings
public void writeLines(String filename, List<String> lines) {
StringBuilder content = new StringBuilder();
for (int i = 0; i < lines.size(); i++) {
if (i > 0) content.append("\n");
content.append(lines.get(i));
}
writeText(filename, content.toString());
System.out.println(lines.size() + " lines written to: " + filename);
}
// Write to external storage
public void writeToExternalFile(File file, String text) {
try {
FileOutputStream output = new FileOutputStream(file);
output.write(text.getBytes(StandardCharsets.UTF_8));
output.close();
System.out.println("Text written to external: " + file.getAbsolutePath());
} catch (Exception e) {
System.out.println("Error writing to external: " + e.getMessage());
}
}
// Write with BufferedWriter
public void writeWithBuffer(File file, String text) {
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(file));
writer.write(text);
writer.close();
System.out.println("Text written with buffer to: " + file.getAbsolutePath());
} catch (Exception e) {
System.out.println("Error writing with buffer: " + e.getMessage());
}
}
}
// 2. Basic Text File Reading
public class TextFileReader {
private Context context;
public TextFileReader(Context context) {
this.context = context;
}
// Read entire file as string
public String readText(String filename) {
try {
FileInputStream input = context.openFileInput(filename);
BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));
StringBuilder content = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
if (content.length() > 0) content.append("\n");
content.append(line);
}
reader.close();
System.out.println("Read " + content.length() + " characters from: " + filename);
return content.toString();
} catch (Exception e) {
System.out.println("Error reading file: " + e.getMessage());
return null;
}
}
// Read with encoding detection
public String readTextWithEncoding(String filename) {
Charset[] encodings = {StandardCharsets.UTF_8, StandardCharsets.ISO_8859_1, StandardCharsets.UTF_16};
for (Charset encoding : encodings) {
try {
FileInputStream input = context.openFileInput(filename);
BufferedReader reader = new BufferedReader(new InputStreamReader(input, encoding));
StringBuilder content = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
if (content.length() > 0) content.append("\n");
content.append(line);
}
reader.close();
System.out.println("Read file with encoding: " + encoding.name());
return content.toString();
} catch (Exception e) {
// Try next encoding
}
}
System.out.println("Could not read file with any supported encoding");
return null;
}
// Read line by line
public List<String> readLines(String filename) {
try {
FileInputStream input = context.openFileInput(filename);
BufferedReader reader = new BufferedReader(new InputStreamReader(input, StandardCharsets.UTF_8));
List<String> lines = new java.util.ArrayList<>();
String line;
while ((line = reader.readLine()) != null) {
lines.add(line);
}
reader.close();
System.out.println("Read " + lines.size() + " lines from: " + filename);
return lines;
} catch (Exception e) {
System.out.println("Error reading lines: " + e.getMessage());
return null;
}
}
// Read from external storage
public String readFromExternalFile(File file) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
StringBuilder content = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
if (content.length() > 0) content.append("\n");
content.append(line);
}
reader.close();
return content.toString();
} catch (Exception e) {
System.out.println("Error reading from external: " + e.getMessage());
return null;
}
}
// Read with BufferedReader (for large files)
public String readWithBuffer(File file) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
StringBuilder content = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
if (content.length() > 0) content.append("\n");
content.append(line);
}
reader.close();
return content.toString();
} catch (Exception e) {
System.out.println("Error reading with buffer: " + e.getMessage());
return null;
}
}
// Read specific range
public String readRange(File file, long start, int length) {
try {
RandomAccessFile raf = new RandomAccessFile(file, "r");
raf.seek(start);
byte[] bytes = new byte[length];
raf.read(bytes);
raf.close();
return new String(bytes, StandardCharsets.UTF_8);
} catch (Exception e) {
System.out.println("Error reading range: " + e.getMessage());
return null;
}
}
}
// 3. File Info Helper
public class FileInfoHelper {
private Context context;
public FileInfoHelper(Context context) {
this.context = context;
}
public File getFileAttributes(String filename) {
File file = new File(context.getFilesDir(), filename);
return file.exists() ? file : null;
}
public void printFileInfo(String filename) {
File file = getFileAttributes(filename);
if (file == null) {
System.out.println("No file info available for: " + filename);
return;
}
System.out.println("\n--- File Info: " + filename + " ---");
System.out.println("Size: " + file.length() + " bytes");
System.out.println("Modified: " + new Date(file.lastModified()));
System.out.println("Path: " + file.getAbsolutePath());
System.out.println("Can read: " + file.canRead());
System.out.println("Can write: " + file.canWrite());
}
}
// 4. Advanced Text Operations
public class AdvancedTextOperations {
private Context context;
public AdvancedTextOperations(Context context) {
this.context = context;
}
// Search for text in file
public List<String[]> searchInFile(String filename, String searchText) {
List<String> lines = new TextFileReader(context).readLines(filename);
List<String[]> results = new java.util.ArrayList<>();
if (lines != null) {
for (int i = 0; i < lines.size(); i++) {
String line = lines.get(i);
if (line.toLowerCase().contains(searchText.toLowerCase())) {
results.add(new String[]{line, String.valueOf(i + 1)});
}
}
}
return results;
}
// Replace text in file
public boolean replaceInFile(String filename, String searchText, String replaceWith) {
String content = new TextFileReader(context).readText(filename);
if (content == null) return false;
String newContent = content.replace(searchText, replaceWith);
new TextFileWriter(context).writeText(filename, newContent);
System.out.println("Replaced occurrences of '" + searchText + "' in: " + filename);
return true;
}
// Count words in file
public int countWordsInFile(String filename) {
String content = new TextFileReader(context).readText(filename);
if (content == null) return 0;
String[] words = content.split("\\s+");
int count = 0;
for (String word : words) {
if (!word.isEmpty()) count++;
}
return count;
}
// Read and parse CSV
public List<List<String>> readCSV(String filename) {
String content = new TextFileReader(context).readText(filename);
List<List<String>> data = new java.util.ArrayList<>();
if (content != null) {
String[] lines = content.split("\n");
for (String line : lines) {
if (!line.isEmpty()) {
String[] values = line.split(",");
List<String> row = new java.util.ArrayList<>(java.util.Arrays.asList(values));
data.add(row);
}
}
}
return data;
}
// Write JSON to file
public void writeJSON(String filename, String json) {
new TextFileWriter(context).writeText(filename, json);
System.out.println("JSON written to: " + filename);
}
// Read JSON from file
public String readJSON(String filename) {
return new TextFileReader(context).readText(filename);
}
}
// Main demonstration
public class FileOperationsDemo {
public static void demonstrateTextFileOperations(Context context) {
System.out.println("=== Android Java Text File Read/Write Examples ===\n");
String testFile = "test_text_file.txt";
String testContent = "Hello, World!\n" +
"This is a test file.\n" +
"Created with Java on Android.\n" +
"Line 4\n" +
"Line 5";
TextFileWriter writer = new TextFileWriter(context);
TextFileReader reader = new TextFileReader(context);
// 1. Basic write
System.out.println("--- 1. Basic Write ---");
writer.writeText(testFile, testContent);
// 2. Basic read
System.out.println("\n--- 2. Basic Read ---");
String content = reader.readText(testFile);
System.out.println("Content:\n" + content);
// 3. Read lines
System.out.println("\n--- 3. Read Lines ---");
List<String> lines = reader.readLines(testFile);
System.out.println(lines.size() + " lines:");
for (int i = 0; i < lines.size(); i++) {
System.out.println(" " + (i + 1) + ": " + lines.get(i));
}
// 4. Append text
System.out.println("\n--- 4. Append Text ---");
writer.appendText(testFile, "\nAppended line!");
String updatedContent = reader.readText(testFile);
System.out.println("Updated content: " + updatedContent);
// 5. File info
System.out.println("\n--- 5. File Info ---");
FileInfoHelper fileInfo = new FileInfoHelper(context);
fileInfo.printFileInfo(testFile);
// 6. Word count
System.out.println("\n--- 6. Word Count ---");
AdvancedTextOperations advancedOps = new AdvancedTextOperations(context);
int wordCount = advancedOps.countWordsInFile(testFile);
System.out.println("Total words: " + wordCount);
System.out.println("\n=== All Text File Operations Completed ===");
}
}
💻 Validação de Arquivo java
🟢 simple
⭐⭐⭐
Verificar existência de arquivo, obter informações de arquivo, validar tipos de arquivo e comparar arquivos
⏱️ 20 min
🏷️ java, android, file operations, validation
Prerequisites:
Basic Java knowledge, Android SDK
// Android Java File Validation Examples
// Using Android Context and Java IO
import android.content.Context;
import android.webkit.MimeTypeMap;
import java.io.*;
import java.security.MessageDigest;
import java.util.Date;
// 1. Basic File Existence Check
public class FileChecker {
private Context context;
public FileChecker(Context context) {
this.context = context;
}
// Check if file exists
public boolean fileExists(File file) {
return file.exists();
}
// Check if path is a file (not directory)
public boolean isFile(File file) {
return file.isFile();
}
// Check if path is a directory
public boolean isDirectory(File file) {
return file.isDirectory();
}
// Check if file is readable
public boolean isReadable(File file) {
return file.canRead();
}
// Check if file is writable
public boolean isWritable(File file) {
return file.canWrite();
}
// Comprehensive file check
public static class FileStatus {
public enum FileStatusType {
NOT_FOUND, FILE, DIRECTORY
}
public FileStatusType status;
public boolean isReadable;
public boolean isWritable;
public boolean isExecutable;
public FileStatus(FileStatusType status, boolean isReadable, boolean isWritable, boolean isExecutable) {
this.status = status;
this.isReadable = isReadable;
this.isWritable = isWritable;
this.isExecutable = isExecutable;
}
}
public FileStatus checkFile(File file) {
if (!file.exists()) {
return new FileStatus(FileStatus.FileStatusType.NOT_FOUND, false, false, false);
}
FileStatus.FileStatusType type = file.isDirectory() ?
FileStatus.FileStatusType.DIRECTORY : FileStatus.FileStatusType.FILE;
return new FileStatus(type, file.canRead(), file.canWrite(), file.canExecute());
}
}
// 2. File Information
public class FileInfo {
private Context context;
public FileInfo(Context context) {
this.context = context;
}
// Get file size
public Long getSize(File file) {
return file.exists() ? file.length() : null;
}
// Get modification date
public Date getModificationDate(File file) {
return file.exists() ? new Date(file.lastModified()) : null;
}
// Get file extension
public String getExtension(File file) {
String name = file.getName();
int dotIndex = name.lastIndexOf('.');
return dotIndex > 0 ? name.substring(dotIndex + 1) : "";
}
// Get file name without extension
public String getNameWithoutExtension(File file) {
String name = file.getName();
int dotIndex = name.lastIndexOf('.');
return dotIndex > 0 ? name.substring(0, dotIndex) : name;
}
// Get MIME type
public String getMIMEType(File file) {
String extension = getExtension(file).toLowerCase();
return MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
}
// Get detailed file info
public static class DetailedFileInfo {
public String path;
public long size;
public Date modificationDate;
public boolean isHidden;
public boolean canRead;
public boolean canWrite;
public boolean canExecute;
public DetailedFileInfo(String path, long size, Date modificationDate, boolean isHidden,
boolean canRead, boolean canWrite, boolean canExecute) {
this.path = path;
this.size = size;
this.modificationDate = modificationDate;
this.isHidden = isHidden;
this.canRead = canRead;
this.canWrite = canWrite;
this.canExecute = canExecute;
}
public void printInfo() {
System.out.println("\n--- File Information ---");
System.out.println("Path: " + path);
System.out.println("Size: " + formatSize(size));
if (modificationDate != null) {
System.out.println("Modified: " + formatDate(modificationDate));
}
System.out.println("Hidden: " + isHidden);
System.out.println("Readable: " + canRead);
System.out.println("Writable: " + canWrite);
System.out.println("Executable: " + canExecute);
}
private String formatSize(long bytes) {
double kb = bytes / 1024.0;
double mb = kb / 1024;
double gb = mb / 1024;
if (gb >= 1) {
return String.format("%.2f GB", gb);
} else if (mb >= 1) {
return String.format("%.2f MB", mb);
} else if (kb >= 1) {
return String.format("%.2f KB", kb);
} else {
return bytes + " bytes";
}
}
private String formatDate(Date date) {
java.text.SimpleDateFormat formatter = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return formatter.format(date);
}
}
public DetailedFileInfo getDetailedInfo(File file) {
if (!file.exists()) return null;
return new DetailedFileInfo(
file.getAbsolutePath(),
file.length(),
new Date(file.lastModified()),
file.isHidden(),
file.canRead(),
file.canWrite(),
file.canExecute()
);
}
}
// 3. File Type Validation
public class FileTypeValidator {
private Context context;
public FileTypeValidator(Context context) {
this.context = context;
}
// Validate by extension
public boolean isValidExtension(File file, List<String> validExtensions) {
String extension = new FileInfo(context).getExtension(file).toLowerCase();
return validExtensions.contains(extension);
}
// Validate image file
public boolean isImageFile(File file) {
List<String> imageExtensions = new ArrayList<>();
imageExtensions.add("jpg");
imageExtensions.add("jpeg");
imageExtensions.add("png");
imageExtensions.add("gif");
imageExtensions.add("bmp");
imageExtensions.add("webp");
return isValidExtension(file, imageExtensions);
}
// Validate text file
public boolean isTextFile(File file) {
List<String> textExtensions = new ArrayList<>();
textExtensions.add("txt");
textExtensions.add("md");
textExtensions.add("html");
textExtensions.add("css");
textExtensions.add("js");
textExtensions.add("json");
textExtensions.add("xml");
textExtensions.add("csv");
return isValidExtension(file, textExtensions);
}
// Check if file is empty
public boolean isEmpty(File file) {
return file.exists() && file.length() == 0;
}
// Validate file size constraints
public boolean isSizeValid(File file, long minSize, long maxSize) {
long size = file.length();
return size >= minSize && size <= maxSize;
}
}
// 4. File Comparison
public class FileComparator {
private Context context;
public FileComparator(Context context) {
this.context = context;
}
public enum ComparisonResult {
LESS_THAN, EQUAL, GREATER_THAN
}
// Compare files by size
public ComparisonResult compareSize(File file1, File file2) {
long size1 = file1.length();
long size2 = file2.length();
if (size1 < size2) return ComparisonResult.LESS_THAN;
if (size1 > size2) return ComparisonResult.GREATER_THAN;
return ComparisonResult.EQUAL;
}
// Compare files by content
public boolean compareContent(File file1, File file2) {
try {
byte[] content1 = readFileBytes(file1);
byte[] content2 = readFileBytes(file2);
if (content1.length != content2.length) {
return false;
}
for (int i = 0; i < content1.length; i++) {
if (content1[i] != content2[i]) {
return false;
}
}
return true;
} catch (Exception e) {
return false;
}
}
private byte[] readFileBytes(File file) throws IOException {
FileInputStream input = new FileInputStream(file);
byte[] bytes = new byte[(int) file.length()];
input.read(bytes);
input.close();
return bytes;
}
// Check if files are identical (size and content)
public boolean areIdentical(File file1, File file2) {
return compareSize(file1, file2) == ComparisonResult.EQUAL && compareContent(file1, file2);
}
// Calculate file checksum (SHA256)
public String calculateChecksum(File file) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
FileInputStream input = new FileInputStream(file);
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1) {
digest.update(buffer, 0, bytesRead);
}
input.close();
byte[] hash = digest.digest();
StringBuilder hexString = new StringBuilder();
for (byte b : hash) {
String hex = Integer.toHexString(0xff & b);
if (hex.length() == 1) hexString.append('0');
hexString.append(hex);
}
return hexString.toString();
} catch (Exception e) {
return null;
}
}
// Compare using checksum
public boolean compareChecksum(File file1, File file2) {
String hash1 = calculateChecksum(file1);
String hash2 = calculateChecksum(file2);
return hash1 != null && hash2 != null && hash1.equals(hash2);
}
}
// 5. Path Validation
public class PathValidator {
private Context context;
public PathValidator(Context context) {
this.context = context;
}
// Validate path format
public boolean isValidPath(File file) {
try {
return file.getCanonicalPath().length() > 0;
} catch (Exception e) {
return false;
}
}
// Validate file name
public boolean isValidFileName(String name) {
if (name == null || name.isEmpty()) {
return false;
}
// Check for invalid characters
String invalidChars = "/\\:*?"<>|";
for (char c : invalidChars.toCharArray()) {
if (name.indexOf(c) != -1) {
return false;
}
}
return true;
}
// Sanitize file name
public String sanitizeFileName(String name) {
String invalidChars = "/\\:*?"<>|";
StringBuilder result = new StringBuilder();
for (char c : name.toCharArray()) {
if (invalidChars.indexOf(c) != -1) {
result.append('_');
} else {
result.append(c);
}
}
return result.toString();
}
}
// 6. File Integrity Checker
public class FileIntegrityChecker {
private Context context;
public FileIntegrityChecker(Context context) {
this.context = context;
}
// Verify file hasn't been corrupted using stored hash
public boolean verifyIntegrity(File file, String expectedHash) {
String actualHash = new FileComparator(context).calculateChecksum(file);
return actualHash != null && actualHash.equalsIgnoreCase(expectedHash);
}
// Generate hash file for integrity checking
public String generateHashFile(File file) {
return new FileComparator(context).calculateChecksum(file);
}
// Quick check (just size)
public boolean quickCheck(File file, long expectedSize) {
return file.exists() && file.length() == expectedSize;
}
}
// Main demonstration
public class FileValidationDemo {
public static void demonstrateFileValidation(Context context) {
System.out.println("=== Android Java File Validation Examples ===\n");
File testFile = new File(context.getCacheDir(), "validation_test.txt");
File testDir = new File(context.getCacheDir(), "validation_test_dir");
// Create test file
try {
FileWriter writer = new FileWriter(testFile);
writer.write("Test content for validation");
writer.close();
testDir.mkdirs();
FileChecker checker = new FileChecker(context);
// 1. File existence checks
System.out.println("--- 1. File Existence Checks ---");
System.out.println("File exists: " + checker.fileExists(testFile));
System.out.println("Is file: " + checker.isFile(testFile));
System.out.println("Is directory: " + checker.isDirectory(testDir));
System.out.println("Is readable: " + checker.isReadable(testFile));
System.out.println("Is writable: " + checker.isWritable(testFile));
// 2. Comprehensive file check
System.out.println("\n--- 2. Comprehensive File Check ---");
FileChecker.FileStatus status = checker.checkFile(testFile);
System.out.println("Status: " + status.status);
System.out.println("Readable: " + status.isReadable);
System.out.println("Writable: " + status.isWritable);
System.out.println("Executable: " + status.isExecutable);
// 3. File information
System.out.println("\n--- 3. File Information ---");
FileInfo fileInfo = new FileInfo(context);
Long size = fileInfo.getSize(testFile);
System.out.println("Size: " + size + " bytes");
Date modDate = fileInfo.getModificationDate(testFile);
System.out.println("Modified: " + modDate);
System.out.println("Extension: " + fileInfo.getExtension(testFile));
System.out.println("Name without ext: " + fileInfo.getNameWithoutExtension(testFile));
// 4. Detailed info
System.out.println("\n--- 4. Detailed File Info ---");
FileInfo.DetailedFileInfo info = fileInfo.getDetailedInfo(testFile);
if (info != null) {
info.printInfo();
}
// 5. File type validation
System.out.println("\n--- 5. File Type Validation ---");
FileTypeValidator validator = new FileTypeValidator(context);
System.out.println("Is text file: " + validator.isTextFile(testFile));
System.out.println("Is image file: " + validator.isImageFile(testFile));
System.out.println("Is empty: " + validator.isEmpty(testFile));
System.out.println("Size valid (1-1000 bytes): " + validator.isSizeValid(testFile, 1, 1000));
// 6. File comparison
System.out.println("\n--- 6. File Comparison ---");
File testFile2 = new File(context.getCacheDir(), "validation_test2.txt");
FileWriter writer2 = new FileWriter(testFile2);
writer2.write("Different content");
writer2.close();
FileComparator comparator = new FileComparator(context);
FileComparator.ComparisonResult sizeCompare = comparator.compareSize(testFile, testFile2);
System.out.println("Size comparison: " + sizeCompare);
boolean contentEqual = comparator.compareContent(testFile, testFile);
System.out.println("Content equal: " + contentEqual);
// 7. Checksum
System.out.println("\n--- 7. Checksum ---");
String checksum = comparator.calculateChecksum(testFile);
System.out.println("SHA256: " + checksum);
FileIntegrityChecker integrityChecker = new FileIntegrityChecker(context);
if (checksum != null) {
boolean valid = integrityChecker.verifyIntegrity(testFile, checksum);
System.out.println("Integrity check: " + (valid ? "PASSED" : "FAILED"));
}
// 8. Path validation
System.out.println("\n--- 8. Path Validation ---");
PathValidator pathValidator = new PathValidator(context);
System.out.println("Is valid path: " + pathValidator.isValidPath(testFile));
System.out.println("Valid filename 'test.txt': " + pathValidator.isValidFileName("test.txt"));
System.out.println("Valid filename 'test?.txt': " + pathValidator.isValidFileName("test?.txt"));
System.out.println("Sanitized name: " + pathValidator.sanitizeFileName("test?.txt"));
// Cleanup
testFile.delete();
testFile2.delete();
testDir.delete();
System.out.println("\nCleanup completed");
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
System.out.println("\n=== All File Validation Examples Completed ===");
}
}
💻 Copiar/Mover Arquivos java
🟡 intermediate
⭐⭐⭐
Copiar e mover arquivos com opções de sobrescrita, rastreamento de progresso e recuperação de erros
⏱️ 25 min
🏷️ java, android, file operations
Prerequisites:
Basic Java knowledge, Android SDK
// Android Java File Copy/Move Examples
// Using Android Context and Java IO
import android.content.Context;
import java.io.*;
import java.nio.channels.FileChannel;
// 1. Basic File Copy
public class FileCopier {
private Context context;
public FileCopier(Context context) {
this.context = context;
}
// Simple copy using streams
public void copyFile(File source, File destination) {
try {
FileInputStream input = new FileInputStream(source);
FileOutputStream output = new FileOutputStream(destination);
byte[] buffer = new byte[1024];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
input.close();
output.close();
System.out.println("Copied: " + source.getAbsolutePath() + " -> " + destination.getAbsolutePath());
} catch (Exception e) {
System.out.println("Error copying file: " + e.getMessage());
}
}
// Copy with overwrite option
public void copyFile(File source, File destination, boolean overwrite) {
if (destination.exists()) {
if (overwrite) {
destination.delete();
System.out.println("Removed existing file: " + destination.getAbsolutePath());
} else {
System.out.println("File already exists: " + destination.getAbsolutePath());
return;
}
}
copyFile(source, destination);
}
// Copy to directory
public void copyFileToDirectory(File source, File directory) {
if (!directory.exists()) {
directory.mkdirs();
}
File destination = new File(directory, source.getName());
copyFile(source, destination);
}
// Copy with progress callback
public interface ProgressCallback {
void onProgress(double progress);
}
public void copyFileWithProgress(File source, File destination, ProgressCallback progress) {
try {
if (!source.exists()) {
System.out.println("Source file not found: " + source.getAbsolutePath());
return;
}
long fileSize = source.length();
FileInputStream input = new FileInputStream(source);
FileOutputStream output = new FileOutputStream(destination);
byte[] buffer = new byte[1024 * 1024]; // 1MB buffer
long bytesCopied = 0;
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
bytesCopied += length;
if (progress != null) {
double percent = (double) bytesCopied / fileSize;
progress.onProgress(percent);
}
}
input.close();
output.close();
System.out.println("Copy completed: " + destination.getAbsolutePath());
} catch (Exception e) {
System.out.println("Error copying with progress: " + e.getMessage());
}
}
// Copy using FileChannel (NIO)
public void copyFileNIO(File source, File destination) {
try {
FileChannel sourceChannel = new FileInputStream(source).getChannel();
FileChannel destChannel = new FileOutputStream(destination).getChannel();
destChannel.transferFrom(sourceChannel, 0, sourceChannel.size());
sourceChannel.close();
destChannel.close();
System.out.println("Copied using NIO: " + source.getAbsolutePath() + " -> " + destination.getAbsolutePath());
} catch (Exception e) {
System.out.println("Error copying with NIO: " + e.getMessage());
}
}
}
// 2. Basic File Move
public class FileMover {
private Context context;
public FileMover(Context context) {
this.context = context;
}
// Simple move
public boolean moveFile(File source, File destination) {
boolean result = source.renameTo(destination);
if (result) {
System.out.println("Moved: " + source.getAbsolutePath() + " -> " + destination.getAbsolutePath());
} else {
System.out.println("Failed to move: " + source.getAbsolutePath());
}
return result;
}
// Move with overwrite
public boolean moveFile(File source, File destination, boolean overwrite) {
if (destination.exists()) {
if (overwrite) {
destination.delete();
System.out.println("Removed existing file: " + destination.getAbsolutePath());
} else {
System.out.println("File already exists: " + destination.getAbsolutePath());
return false;
}
}
return moveFile(source, destination);
}
// Move to directory
public boolean moveFileToDirectory(File source, File directory) {
if (!directory.exists()) {
directory.mkdirs();
}
File destination = new File(directory, source.getName());
return moveFile(source, destination);
}
// Safe move with backup
public boolean moveFileWithBackup(File source, File destination) {
// Create backup if destination exists
if (destination.exists()) {
File backupFile = new File(destination.getParent(), destination.getName() + ".backup");
destination.renameTo(backupFile);
System.out.println("Backup created: " + backupFile.getAbsolutePath());
}
return moveFile(source, destination);
}
// Move using copy and delete (for cross-device moves)
public boolean moveFileCopyDelete(File source, File destination) {
try {
// Copy first
new FileCopier(context).copyFile(source, destination);
// Delete source after successful copy
source.delete();
System.out.println("Moved (copy+delete): " + source.getAbsolutePath() + " -> " + destination.getAbsolutePath());
return true;
} catch (Exception e) {
System.out.println("Error moving with copy+delete: " + e.getMessage());
return false;
}
}
}
// 3. Batch Operations
public class BatchFileOperations {
private Context context;
public BatchFileOperations(Context context) {
this.context = context;
}
// Copy multiple files
public void copyFiles(List<File> sources, File destinationDirectory) {
if (!destinationDirectory.exists()) {
destinationDirectory.mkdirs();
}
int successCount = 0;
int failureCount = 0;
FileCopier copier = new FileCopier(context);
for (File source : sources) {
try {
File destination = new File(destinationDirectory, source.getName());
copier.copyFile(source, destination, true);
successCount++;
} catch (Exception e) {
System.out.println("Failed to copy " + source.getName() + ": " + e.getMessage());
failureCount++;
}
}
System.out.println("Batch copy completed: " + successCount + " succeeded, " + failureCount + " failed");
}
// Move multiple files
public void moveFiles(List<File> sources, File destinationDirectory) {
if (!destinationDirectory.exists()) {
destinationDirectory.mkdirs();
}
int successCount = 0;
int failureCount = 0;
FileMover mover = new FileMover(context);
for (File source : sources) {
try {
File destination = new File(destinationDirectory, source.getName());
mover.moveFile(source, destination, true);
successCount++;
} catch (Exception e) {
System.out.println("Failed to move " + source.getName() + ": " + e.getMessage());
failureCount++;
}
}
System.out.println("Batch move completed: " + successCount + " succeeded, " + failureCount + " failed");
}
// Copy directory recursively
public void copyDirectory(File sourceDir, File destinationDir) {
if (!sourceDir.isDirectory()) {
System.out.println("Not a directory: " + sourceDir.getAbsolutePath());
return;
}
if (!destinationDir.exists()) {
destinationDir.mkdirs();
}
File[] files = sourceDir.listFiles();
if (files != null) {
for (File file : files) {
File destination = new File(destinationDir, file.getName());
if (file.isDirectory()) {
copyDirectory(file, destination);
} else {
new FileCopier(context).copyFile(file, destination);
}
}
}
System.out.println("Directory copied: " + sourceDir.getAbsolutePath() + " -> " + destinationDir.getAbsolutePath());
}
// Move directory
public boolean moveDirectory(File sourceDir, File destinationDir) {
if (!sourceDir.isDirectory()) {
System.out.println("Not a directory: " + sourceDir.getAbsolutePath());
return false;
}
boolean result = sourceDir.renameTo(destinationDir);
if (result) {
System.out.println("Directory moved: " + sourceDir.getAbsolutePath() + " -> " + destinationDir.getAbsolutePath());
} else {
// Try recursive move
copyDirectory(sourceDir, destinationDir);
deleteDirectory(sourceDir);
}
return result;
}
private void deleteDirectory(File dir) {
File[] files = dir.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
deleteDirectory(file);
} else {
file.delete();
}
}
}
dir.delete();
}
}
// 4. Smart File Operations
public class SmartFileOperations {
private Context context;
public SmartFileOperations(Context context) {
this.context = context;
}
// Copy with duplicate handling
public void smartCopy(File source, File destination) {
if (destination.exists()) {
// Add number suffix
String baseName = destination.getName().replaceAll("\\.[^.]*$", "");
String extension = "";
int dotIndex = destination.getName().lastIndexOf('.');
if (dotIndex > 0) {
extension = destination.getName().substring(dotIndex);
baseName = destination.getName().substring(0, dotIndex);
}
int counter = 1;
File newPath = destination;
while (newPath.exists()) {
String newBaseName = baseName + "_" + counter;
newPath = new File(destination.getParent(), newBaseName + extension);
counter++;
}
System.out.println("Destination exists, using: " + newPath.getAbsolutePath());
new FileCopier(context).copyFile(source, newPath);
} else {
new FileCopier(context).copyFile(source, destination);
}
}
// Verified copy
public boolean verifiedCopy(File source, File destination) {
long sourceSize = source.length();
new FileCopier(context).copyFile(source, destination, true);
// Verify by comparing file sizes
long destSize = destination.length();
if (sourceSize == destSize) {
System.out.println("Verified copy: " + sourceSize + " bytes");
return true;
} else {
System.out.println("Verification failed: size mismatch");
return false;
}
}
}
// Main demonstration
public class FileCopyMoveDemo {
public static void demonstrateFileCopyMove(Context context) {
System.out.println("=== Android Java File Copy/Move Examples ===\n");
File tempDir = new File(context.getCacheDir(), "file_operations_test");
tempDir.mkdirs();
File sourceFile = new File(context.getCacheDir(), "source_test.txt");
File destFile1 = new File(context.getCacheDir(), "dest_test1.txt");
File destFile2 = new File(context.getCacheDir(), "dest_test2.txt");
try {
// Create test file
FileWriter writer = new FileWriter(sourceFile);
writer.write("Test content for copy/move");
writer.close();
FileCopier copier = new FileCopier(context);
// 1. Simple copy
System.out.println("--- 1. Simple Copy ---");
copier.copyFile(sourceFile, destFile1);
// 2. Copy with progress
System.out.println("\n--- 2. Copy with Progress ---");
copier.copyFileWithProgress(sourceFile, destFile2, new FileCopier.ProgressCallback() {
@Override
public void onProgress(double progress) {
System.out.println("Progress: " + (int)(progress * 100) + "%");
}
});
// 3. Simple move
System.out.println("\n--- 3. Simple Move ---");
File moveSource = new File(context.getCacheDir(), "move_source.txt");
File moveDest = new File(context.getCacheDir(), "move_dest.txt");
FileWriter moveWriter = new FileWriter(moveSource);
moveWriter.write("File to move");
moveWriter.close();
FileMover mover = new FileMover(context);
mover.moveFile(moveSource, moveDest);
// 4. Smart copy
System.out.println("\n--- 4. Smart Copy ---");
File smartSource = new File(context.getCacheDir(), "smart_source.txt");
File smartDest = new File(context.getCacheDir(), "smart_dest.txt");
FileWriter smartWriter = new FileWriter(smartSource);
smartWriter.write("Smart copy test");
smartWriter.close();
SmartFileOperations smartOps = new SmartFileOperations(context);
smartOps.smartCopy(smartSource, smartDest);
smartOps.smartCopy(smartSource, smartDest); // Will create duplicate
// 5. Verified copy
System.out.println("\n--- 5. Verified Copy ---");
File verifySource = new File(context.getCacheDir(), "verify_source.txt");
File verifyDest = new File(context.getCacheDir(), "verify_dest.txt");
FileWriter verifyWriter = new FileWriter(verifySource);
verifyWriter.write("Verification test");
verifyWriter.close();
smartOps.verifiedCopy(verifySource, verifyDest);
// Cleanup
tempDir.delete();
System.out.println("\nCleanup completed");
} catch (Exception e) {
System.out.println("Error: " + e.getMessage());
}
System.out.println("\n=== All File Copy/Move Examples Completed ===");
}
}
💻 Travessia de Diretório java
🟡 intermediate
⭐⭐⭐⭐
Percorrer diretórios recursivamente, listar arquivos com filtros e procurar tipos de arquivo específicos
⏱️ 30 min
🏷️ java, android, file operations, directory
Prerequisites:
Intermediate Java, Android SDK
// Android Java Directory Traversal Examples
// Using Android Context and Java IO
import android.content.Context;
import java.io.*;
import java.util.*;
// 1. Basic Directory Listing
public class DirectoryLister {
private Context context;
public DirectoryLister(Context context) {
this.context = context;
}
// List all items in directory
public List<String> listDirectory(File directory) {
if (!directory.exists() || !directory.isDirectory()) {
System.out.println("Not a directory: " + directory.getAbsolutePath());
return null;
}
File[] files = directory.listFiles();
if (files == null) return null;
List<String> fileNames = new ArrayList<>();
for (File file : files) {
fileNames.add(file.getName());
}
return fileNames;
}
// List with details
public static class FileItem {
public String name;
public String path;
public boolean isDirectory;
public long size;
public Date modifiedDate;
public FileItem(String name, String path, boolean isDirectory, long size, Date modifiedDate) {
this.name = name;
this.path = path;
this.isDirectory = isDirectory;
this.size = size;
this.modifiedDate = modifiedDate;
}
}
public List<FileItem> listDirectoryWithDetails(File directory) {
if (!directory.exists() || !directory.isDirectory()) {
return null;
}
File[] files = directory.listFiles();
if (files == null) return null;
List<FileItem> items = new ArrayList<>();
for (File file : files) {
FileItem item = new FileItem(
file.getName(),
file.getAbsolutePath(),
file.isDirectory(),
file.isFile() ? file.length() : 0,
new Date(file.lastModified())
);
items.add(item);
}
return items;
}
// List only files
public List<File> listFiles(File directory) {
File[] files = directory.listFiles();
if (files == null) return null;
List<File> fileList = new ArrayList<>();
for (File file : files) {
if (file.isFile()) {
fileList.add(file);
}
}
return fileList;
}
// List only subdirectories
public List<File> listSubdirectories(File directory) {
File[] files = directory.listFiles();
if (files == null) return null;
List<File> dirList = new ArrayList<>();
for (File file : files) {
if (file.isDirectory()) {
dirList.add(file);
}
}
return dirList;
}
}
// 2. Recursive Directory Traversal
public class DirectoryTraverser {
private Context context;
public DirectoryTraverser(Context context) {
this.context = context;
}
// Recursively find all files
public List<File> findAllFiles(File directory) {
List<File> files = new ArrayList<>();
if (!directory.exists() || !directory.isDirectory()) {
return files;
}
File[] items = directory.listFiles();
if (items == null) return files;
for (File item : items) {
if (item.isDirectory()) {
files.addAll(findAllFiles(item));
} else {
files.add(item);
}
}
return files;
}
// Recursive traversal with callback
public interface TraversalCallback {
void onFile(File file, int depth);
}
public void traverseDirectory(File directory, TraversalCallback callback) {
traverseDirectory(directory, 0, callback);
}
private void traverseDirectory(File directory, int depth, TraversalCallback callback) {
if (!directory.exists() || !directory.isDirectory()) {
return;
}
File[] items = directory.listFiles();
if (items == null) return;
for (File item : items) {
callback.onFile(item, depth);
if (item.isDirectory()) {
traverseDirectory(item, depth + 1, callback);
}
}
}
// Get directory tree
public static class DirectoryNode {
public String name;
public String path;
public boolean isDirectory;
public int depth;
public List<DirectoryNode> children = new ArrayList<>();
public DirectoryNode(String name, String path, boolean isDirectory, int depth) {
this.name = name;
this.path = path;
this.isDirectory = isDirectory;
this.depth = depth;
}
public void printTree() {
String indent = " ".repeat(depth);
String prefix = isDirectory ? "📁" : "📄";
System.out.println(prefix + " " + indent + name);
for (DirectoryNode child : children) {
child.printTree();
}
}
}
public DirectoryNode getDirectoryTree(File directory, int maxDepth) {
DirectoryNode root = new DirectoryNode(
directory.getName(),
directory.getAbsolutePath(),
true,
0
);
buildTree(root, maxDepth);
return root;
}
private void buildTree(DirectoryNode node, int maxDepth) {
if (node.depth >= maxDepth) return;
File directory = new File(node.path);
if (!directory.exists() || !directory.isDirectory()) {
return;
}
File[] files = directory.listFiles();
if (files == null) return;
// Sort by name
Arrays.sort(files, Comparator.comparing(File::getName));
for (File file : files) {
DirectoryNode childNode = new DirectoryNode(
file.getName(),
file.getAbsolutePath(),
file.isDirectory(),
node.depth + 1
);
node.children.add(childNode);
if (file.isDirectory()) {
buildTree(childNode, maxDepth);
}
}
}
}
// 3. File Filtering
public class FileFilter {
private Context context;
public FileFilter(Context context) {
this.context = context;
}
// Filter by extension
public List<File> filterByExtension(File directory, List<String> extensions) {
DirectoryTraverser traverser = new DirectoryTraverser(context);
List<File> files = traverser.findAllFiles(directory);
List<File> filtered = new ArrayList<>();
for (File file : files) {
String extension = getFileExtension(file);
if (extensions.contains(extension.toLowerCase())) {
filtered.add(file);
}
}
return filtered;
}
// Filter by name pattern
public List<File> filterByNamePattern(File directory, String pattern) {
DirectoryTraverser traverser = new DirectoryTraverser(context);
List<File> files = traverser.findAllFiles(directory);
List<File> filtered = new ArrayList<>();
for (File file : files) {
if (file.getName().matches(pattern)) {
filtered.add(file);
}
}
return filtered;
}
// Filter by size
public List<File> filterBySize(File directory, long minSize, long maxSize) {
DirectoryTraverser traverser = new DirectoryTraverser(context);
List<File> files = traverser.findAllFiles(directory);
List<File> filtered = new ArrayList<>();
for (File file : files) {
long size = file.length();
if (size >= minSize && size <= maxSize) {
filtered.add(file);
}
}
return filtered;
}
private String getFileExtension(File file) {
String name = file.getName();
int dotIndex = name.lastIndexOf('.');
return dotIndex > 0 ? name.substring(dotIndex + 1) : "";
}
}
// 4. Directory Statistics
public class DirectoryStatistics {
private Context context;
public DirectoryStatistics(Context context) {
this.context = context;
}
public static class Stats {
public int totalFiles = 0;
public int totalDirectories = 0;
public long totalSize = 0;
public String largestFilePath;
public long largestFileSize = 0;
public Map<String, Integer> extensionCounts = new HashMap<>();
public void printStats() {
System.out.println("\n=== Directory Statistics ===");
System.out.println("Total files: " + totalFiles);
System.out.println("Total directories: " + totalDirectories);
System.out.println("Total size: " + formatBytes(totalSize));
if (largestFileSize > 0) {
System.out.println("Largest file: " + new File(largestFilePath).getName());
System.out.println(" Size: " + formatBytes(largestFileSize));
}
System.out.println("\nExtension counts:");
List<Map.Entry<String, Integer>> sorted = new ArrayList<>(extensionCounts.entrySet());
Collections.sort(sorted, (a, b) -> b.getValue().compareTo(a.getValue()));
for (Map.Entry<String, Integer> entry : sorted) {
System.out.println(" ." + entry.getKey() + ": " + entry.getValue());
}
}
private String formatBytes(long bytes) {
double kb = bytes / 1024.0;
double mb = kb / 1024;
double gb = mb / 1024;
if (gb >= 1) {
return String.format("%.2f GB", gb);
} else if (mb >= 1) {
return String.format("%.2f MB", mb);
} else if (kb >= 1) {
return String.format("%.2f KB", kb);
} else {
return bytes + " bytes";
}
}
}
public Stats calculateStatistics(File directory) {
Stats stats = new Stats();
DirectoryTraverser traverser = new DirectoryTraverser(context);
traverser.traverseDirectory(directory, (file, depth) -> {
if (file.isDirectory()) {
stats.totalDirectories++;
} else {
stats.totalFiles++;
long size = file.length();
stats.totalSize += size;
// Track largest file
if (size > stats.largestFileSize) {
stats.largestFileSize = size;
stats.largestFilePath = file.getAbsolutePath();
}
// Count extensions
String extension = getFileExtension(file);
if (extension.isEmpty()) {
extension = "(no extension)";
}
extension = extension.toLowerCase();
stats.extensionCounts.put(extension, stats.extensionCounts.getOrDefault(extension, 0) + 1);
}
});
return stats;
}
private String getFileExtension(File file) {
String name = file.getName();
int dotIndex = name.lastIndexOf('.');
return dotIndex > 0 ? name.substring(dotIndex + 1) : "";
}
}
// 5. File Searcher
public class FileSearcher {
private Context context;
public FileSearcher(Context context) {
this.context = context;
}
// Search files by name
public List<File> searchByName(File directory, String name) {
DirectoryTraverser traverser = new DirectoryTraverser(context);
List<File> files = traverser.findAllFiles(directory);
List<File> results = new ArrayList<>();
for (File file : files) {
if (file.getName().toLowerCase().contains(name.toLowerCase())) {
results.add(file);
}
}
return results;
}
// Search files containing text
public List<File> searchByContent(File directory, String searchText) {
DirectoryTraverser traverser = new DirectoryTraverser(context);
List<File> files = traverser.findAllFiles(directory);
List<File> results = new ArrayList<>();
for (File file : files) {
try {
String content = readFile(file);
if (content != null && content.toLowerCase().contains(searchText.toLowerCase())) {
results.add(file);
}
} catch (Exception e) {
// Skip files that can't be read
}
}
return results;
}
private String readFile(File file) {
try {
BufferedReader reader = new BufferedReader(new FileReader(file));
StringBuilder content = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
if (content.length() > 0) content.append("\n");
content.append(line);
}
reader.close();
return content.toString();
} catch (Exception e) {
return null;
}
}
}
// Main demonstration
public class DirectoryTraversalDemo {
public static void demonstrateDirectoryTraversal(Context context) {
System.out.println("=== Android Java Directory Traversal Examples ===\n");
File testDir = new File(context.getCacheDir(), "directory_traversal_test");
testDir.mkdirs();
// Create some test files
createTestFiles(testDir);
DirectoryLister lister = new DirectoryLister(context);
// 1. List directory
System.out.println("--- 1. List Directory ---");
List<String> items = lister.listDirectory(testDir);
System.out.println("Items in " + testDir.getName() + ":");
if (items != null) {
for (String item : items) {
System.out.println(" - " + item);
}
}
// 2. List with details
System.out.println("\n--- 2. List with Details ---");
List<DirectoryLister.FileItem> detailedItems = lister.listDirectoryWithDetails(testDir);
System.out.println("Files in " + testDir.getName() + ":");
if (detailedItems != null) {
for (DirectoryLister.FileItem item : detailedItems) {
String type = item.isDirectory ? "DIR " : "FILE";
System.out.println(" [" + type + "] " + item.name + " - " + item.size + " bytes");
}
}
// 3. Recursive traversal
System.out.println("\n--- 3. Recursive Traversal ---");
DirectoryTraverser traverser = new DirectoryTraverser(context);
List<File> allFiles = traverser.findAllFiles(testDir);
System.out.println("All files:");
for (File file : allFiles) {
System.out.println(" - " + file.getAbsolutePath());
}
// 4. Directory tree
System.out.println("\n--- 4. Directory Tree ---");
DirectoryTraverser.DirectoryNode tree = traverser.getDirectoryTree(testDir, 2);
tree.printTree();
// 5. Filter by extension
System.out.println("\n--- 5. Filter by Extension ---");
FileFilter fileFilter = new FileFilter(context);
List<String> txtExtensions = new ArrayList<>();
txtExtensions.add("txt");
List<File> txtFiles = fileFilter.filterByExtension(testDir, txtExtensions);
System.out.println("Text files:");
for (File file : txtFiles) {
System.out.println(" - " + file.getName());
}
// 6. Directory statistics
System.out.println("\n--- 6. Directory Statistics ---");
DirectoryStatistics stats = new DirectoryStatistics(context);
DirectoryStatistics.Stats directoryStats = stats.calculateStatistics(testDir);
directoryStats.printStats();
// 7. Search by name
System.out.println("\n--- 7. Search by Name ---");
FileSearcher searcher = new FileSearcher(context);
List<File> searchResults = searcher.searchByName(testDir, "file");
System.out.println("Files containing 'file':");
for (File file : searchResults) {
System.out.println(" - " + file.getName());
}
// Cleanup
testDir.delete();
System.out.println("\nCleanup completed");
System.out.println("\n=== All Directory Traversal Examples Completed ===");
}
private static void createTestFiles(File testDir) {
try {
new File(testDir, "file1.txt").createNewFile();
new File(testDir, "file2.md").createNewFile();
File subDir = new File(testDir, "subdir");
subDir.mkdirs();
new File(subDir, "subfile1.txt").createNewFile();
} catch (Exception e) {
// Ignore
}
}
}