Diretorio C: do windows no linux?

Boa tarde pessoal

É o seguinte

Criei uma aplicação com netbeans, esta tudo ok, estava usando o netbens para windows.
Porem tive que restaurar meu Sistema nas condições de fabrica, até ai blz
Como nao queria mais ter esse problema de ficar resetando o pc as condições de fabrica resolvi instalar o VirtualBox para Criar um pc virtual. Criei um pc com Linux (UBUNTU) Instalei todos os programas que preciso para continuar o desenvolvimento da minha aplicação, instalei o wine tbm para poder instalar programas do windows no linux, porem minha aplicação usa como Banco de dados o SQLITE e na minha programação no metodo de conexão com o BD eu coloquei o caminho para C:\pastaAplicaçãofinal\database\meubd.db só que no linux nao existe esse diretorio.

Como resolvo isso?

Tem como criar um diretorio C: para que minha aplicação rode tanto no linux e no windows ou outra forma de fazer isso? tipo minha aplicação buscar o bd em um diretorio que seria comum tanto em linux como no windows.

Ou para desenvolver um software para rodar em sistemas operacionais diferentes tenho que desenvolver no seu especifico ambiente?

alguem pode ajudar?

1 - Onde você colocou na VM seu BD SqlLite?
2 - [quote=“Junior_Campanha, post:1, topic:339499”]
Ou para desenvolver um software para rodar em sistemas operacionais diferentes tenho que desenvolver no seu especifico ambiente?
[/quote] Não precisa, relaxa.
3 - Esta app é Desktop ou Web?
4 - Se for Desktop, vc irá usar um arquivo de .config, tipo que fica os parâmetros necessários p/ iniciar o sistemas talz… Neste arquivo vai está o path de onde se encontra seu BD.

Nós dê mais detalhes do que você está fazendo, quem sabe posso lhe apresentar uns “camaradas da hora”(ferramentas).

até tem, porem este é o começo dos problemas

  1. o diretorio C: seria uma referencia relativa e não absoluta no linux. referencias absolutas começam com / ( como em /etc/passwd ou /home/user )

  2. o separador de diretorio no linux é / enquanto no windows é \

O que vc precisa fazer é pensar na portabilidade da sua solução.

uma das formas é vc ter um arquivo de propriedades POR ambiente e quando for no linux vc lê um caminho, no windows vc lê outro.

outra forma é vc exigir uma variavel de ambiente como DATABASEPATH

uma terceira forma é vc usar alguma ferramenta que abstraia a criação de caminhos. Perl por exemplo tem File::Spec que ajuda a concatenar caminhos. eu acho que o java ( tenho 99.9% ) consegue abstrair isso.

De qq forma vai ser mais facil se vc trabalhar com o caminho relativo, e não absoluto, do seu banco de dados.

entendo

É que sou inciciante em java, estou aprendendo por conta vendo tutoriais.
Então sei fazer apenas aquilo que aprendo nos tutoriais da vida kkkk.
Mas quero aprender por isso pergunto varias coisas aqui no forum até coisas absurdas.

Entao aqui esta minha classe de conexão que aprendi nos tutoriais.
public class Conexao {
public static Connection getConexao() {
// Cria e retorna uma nova conexão com o BD
//private Connection getConnection() {
//—> CONEXÃO COM FIREBIRD <— \
//Connection conn = null;
//try {
// Class.forName(“org.firebirdsql.jdbc.FBDriver”).newInstance();
// String url = “jdbc:firebirdsql:localhost/3050:C:/DESCONTAMINADOR/DATABASE/DESCONTAMINADOR.GDB”;
// String user = “sysdba”;
// String pass = “masterkey”;
// conn = DriverManager.getConnection(url, user, pass);
//} catch (InstantiationException e) {
// e.printStackTrace();
//} catch (IllegalAccessException e) {
// e.printStackTrace();
//} catch (ClassNotFoundException e) {
// e.printStackTrace();
//} catch (SQLException e) {
// e.printStackTrace();
//}
//return conn;

                    //---> CONEXÃO COM SQLITE <--- \\
                   Connection conn = null;
                    try {
                Class.forName("org.sqlite.JDBC").newInstance();
                String url = "jdbc:sqlite:C:\\DESCONTAMINADOR\\DATABASE\\DESCONTAMINADOR.DB";
                    //       return DriverManager.getConnection("jdbc:sqlite:C:\\DESCONTAMINADOR\\DATABASE\\DESCONTAMINADOR.DB");
                conn = DriverManager.getConnection(url);
            } catch (InstantiationException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return conn;
                    
                  //Class.forName ("org.firebirdsql.jdbc.FBDriver");
                //System.out.println ("Conectando ao banco de dados");
                //return DriverManager.getConnection("jdbc:firebirdsql:localhost/3050:C:\\DESCONTAMINADOR\\DATABASE\\DESCONTAMINADOR.GDB");
                //Class.forName("org.sqlite.JDBC");
                //System.out.println("Conectando ao banco de dados");
                //return DriverManager.getConnection("jdbc:sqlite:C:\\CARGAS PERIGOSAS\\DataBase\\CARGASPERIGOSAS");
                //return DriverManager.getConnection("jdbc:sqlite:C:\\CARGAS PERIGOSAS\\DataBase\\DB");
                // Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
                //System.out.println("Conectando ao banco de dados");
                //return DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)}; DBQ=CIPP.mdb");
        
        }
    }

Como faço para criar um caminho relativo onde o aplicativo possa buscar meu bd.

ja tentei até criar um pacote na minha aplicação e colocar o bd la, e tentar fazer minha aplicação buscar dentro dela o bd mas sem sucesso
ja coloquei minha pasta do bd no diretorio que corresponderia ao C: no wine mas tambem nao deu certo

me ajudem ai quero aprender a programar em java

System.getProperty(“os.name”);

veja o que isso retorna no linux e no windows.

se for windows vc usa C:

se for linux vc usa outra coisa

ok vou tentar

testei aki no meu linux e retornou Linux

tentei fazer a comparação mas nao deu certo

para comparar o System.getProperty eu posso usar o .equals()???

tentei desse jeito

String os;
              os = System.getProperty("os.name");
              if(os.equals("Linux")){
               Connection conn = null;
                try {
            Class.forName("org.sqlite.JDBC").newInstance();
            String url = "jdbc:sqlite:/home/junior/DESCONTAMINADOR/DATABASE/DESCONTAMINADOR.DB";
                //       return DriverManager.getConnection("jdbc:sqlite:C:\\DESCONTAMINADOR\\DATABASE\\DESCONTAMINADOR.DB");
            conn = DriverManager.getConnection(url);
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;   

porem me retorna o erro

> nov 29, 2016 8:24:56 AM descontaminador.telas.Descontaminação formWindowOpened
> GRAVE: null
> org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (no such table: DESCONTAMINADOR)
>     at org.sqlite.core.DB.newSQLException(DB.java:920)
>     at org.sqlite.core.DB.newSQLException(DB.java:932)
>     at org.sqlite.core.DB.throwex(DB.java:897)
>     at org.sqlite.core.NativeDB.prepare(Native Method)
>     at org.sqlite.core.DB.prepare(DB.java:227)
>     at org.sqlite.core.CorePreparedStatement.<init>(CorePreparedStatement.java:41)
>     at org.sqlite.jdbc3.JDBC3PreparedStatement.<init>(JDBC3PreparedStatement.java:30)
>     at org.sqlite.jdbc4.JDBC4PreparedStatement.<init>(JDBC4PreparedStatement.java:19)
>     at org.sqlite.jdbc4.JDBC4Connection.prepareStatement(JDBC4Connection.java:48)
>     at org.sqlite.jdbc3.JDBC3Connection.prepareStatement(JDBC3Connection.java:254)
>     at org.sqlite.jdbc3.JDBC3Connection.prepareStatement(JDBC3Connection.java:226)
>     at descontaminador.telas.Descontaminação.formWindowOpened(Descontaminação.java:1937)
>     at descontaminador.telas.Descontaminação.access$100(Descontaminação.java:41)
>     at descontaminador.telas.Descontaminação$1.windowOpened(Descontaminação.java:464)
>     at java.awt.AWTEventMulticaster.windowOpened(AWTEventMulticaster.java:339)
>     at java.awt.Window.processWindowEvent(Window.java:2051)
>     at javax.swing.JFrame.processWindowEvent(JFrame.java:305)
>     at java.awt.Window.processEvent(Window.java:2013)
>     at java.awt.Component.dispatchEventImpl(Component.java:4889)
>     at java.awt.Container.dispatchEventImpl(Container.java:2294)
>     at java.awt.Window.dispatchEventImpl(Window.java:2746)
>     at java.awt.Component.dispatchEvent(Component.java:4711)
>     at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
>     at java.awt.EventQueue.access$500(EventQueue.java:97)
>     at java.awt.EventQueue$3.run(EventQueue.java:709)
>     at java.awt.EventQueue$3.run(EventQueue.java:703)
>     at java.security.AccessController.doPrivileged(Native Method)
>     at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
>     at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
>     at java.awt.EventQueue$4.run(EventQueue.java:731)
>     at java.awt.EventQueue$4.run(EventQueue.java:729)
>     at java.security.AccessController.doPrivileged(Native Method)
>     at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
>     at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
>     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
>     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
>     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
>     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
>     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
>     at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

acredito que esse erro seja pq a aplicação ainda nao encontra o caminho especificado