Pegar diretório de um arquivo

Estou tentando recuperar o diretório completo de um arquivo selecionado do computador de um usuário do sistema e para isso tentar um utilizar o seguinte comando.

variaveltipoField.getAbsolutePath();

Só que isso me retorna a system32, eu preciso ter um retorno tipo
C:\\Documents\Arquivo.pdf

Como eu posso fazer ?

Caso o caminho completo do arquivo seja selecionado pelo usuário numa interface gráfica, Com a biblioteca JavaFx você pode usar o componente FileChooser, por exemplo:

FileChooser fc = new FileChooser();

File fileSelecionado = fc.showDialog( primaryStage );

if ( fileSelecionado != null )
{
      System.out.println( fileSelecionado );
}

Se usar Swing, use a classe JFileChooser.

Agora se você quer passar o caminho por meio do código Java sem interface gráfica pode ser assim:

	    String raiz = FileSystems.getDefault().getRootDirectories().iterator().next().toString();
		
		Path path = Paths.get( raiz, "Documentos", "Arquivo.pdf" ); 
		    
		System.out.println( path );

Agradeço a atenção, mas eu to usando java web: eu possuo um file upload assim:

<p:fileUpload id="declaracao" value="#{alunoMB.aluno.arquivorecebido}" mode="simple" dragDropSupport="false" update="messages" sizeLimit="100000" fileLimit="1"/>

Eu armazeno o arquivo em uma váriavel String, só que pra salvar no banco eu passo o diretório e transformo no array de bytes, o problema tá em receber o diretório, tentei alguma opções:

//variavel String
System.out.println("Arquivo------" + a.getArquivorecebido());
File filerecebido = new File(a.getArquivorecebido());

//tentativa de pegar o diretório
String caminho = filerecebido.getPath();
String caminho2 = filerecebido.getCanonicalPath();
String caminho3 = filerecebido.getName();

Retornos em tela:

Arquivo------org.primefaces.model.UploadedFileWrapper@6bb9768e
File------org.primefaces.model.UploadedFileWrapper@6bb9768e
Caminho---org.primefaces.model.UploadedFileWrapper@6bb9768e
Caminho2---C:\Windows\System32\org.primefaces.model.UploadedFileWrapper@6bb9768e
Caminho3---org.primefaces.model.UploadedFileWrapper@6bb9768e

Se eu passar o diretório na instância do File, funciona perfeitamente
File filerecebido = new File("C:\\Documents\Arquivo.pdf");

Em minhas aplicações quando vou salvar um caminho de arquivo, eu uso um objeto File na classe, e salvo uma String (o caminho completo).

Qual a necessidade de transformar uma String em array de bytes?
Qual SGBD você usa?

A necessidade é armazenar o arquivo do usuário no banco, depois eu faço a conversão e exibo o documento em tela, meu banco é o postgres.

E se eu transformar minha variavel que recebe o arquivo em um File, será que dava boa ?

Não é possível transformar um diretório em um array de bytes.
Você lê os bytes do arquivo recebido, através de um InputStream e aí salva os bytes dele no banco.

Então, na verdade eu já faço isso, começando pelo meu banco, eu possua uma coluna do tipo bytea que recebe esse arquivo:

arquivo bytea

Já indo pro código, na minha tela eu possuo um fileuploader

<p:fileUpload id="declaracao" value="#{alunoMB.aluno.arquivorecebido}" mode="simple" dragDropSupport="false" update="messages" sizeLimit="100000" fileLimit="1"/>

Esse variável que está mapeada ali, é uma String, que na classe está assim:

private String arquivorecebido;

Já no meu DAO eu faço assim:

			File file = new File("C:\\Downloads\\Documento.pdf");
			InputStream is = new FileInputStream(file);
			byte[] bytes = new byte[(int) file.length()];
			int offset = 0;
			int numRead = 0;
			while (offset < bytes.length && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0) {
				offset += numRead;
			}

E o valor que é enviado pro meu banco é esse:
"%PDF-1.7\0151 0 obj\015<</Type /XObject /Subtype /Image /Name /Im1 /Width 1654 /Height 2338 /Length 251653/ColorSpace /DeviceRGB /BitsPerComponent 8 /Filter [ /DCTDecode ] >> stream\015\377\330\377\340\000\020JFIF\000\001\001\001\000\310\000\310\000\000\37 (...)"

Eu ainda não tentei recuperar o arquivo pra ver se ele salvou certo, mas acredito que sim, meu maior problema é pegar o diretório, ali no exemplo eu passo ele como parâmetro, o que eu preciso é pegar nofileuploader

File pasta = filerecebido.getParentFile();

Estou quase lá, eu mudei um pouco minha estratégia, estou usando uma variável do tipo Part e no bean eu faço assim:

try (InputStream is = arquivo.getInputStream()) {
			String filename = arquivo.getSubmittedFileName();
			Files.copy(is, new File("C:\\Users\\meuuser\\Desktop\\documentos_alunos","123.456.789-20_"+filename).toPath());
		} catch (IOException ex) {
			ex.printStackTrace();
		}

Na terceira linha eu eu copio o arquivo pro diretorio e funciona perfeitamente, eu só preciso pegar o caminho informado nessa linha e salvar em uma String, alguma ideia de como eu posso fazer ?

Resolvido com:

File caminho = new File("C:\\meuuser\\elisson\\Desktop\\documentos_alunos","123.456.789-20_"+filename);
System.out.println("Caminho"+caminho.getPath());